home *** CD-ROM | disk | FTP | other *** search
/ PCGUIA 2010 Software/Programs / PCGuia_programas.iso / Software / Utils / Advanced SystemCare / asc-setup.exe / {app} / tb / chrome / iobitcom.jar / content / ctoolbar.js < prev    next >
Encoding:
Text File  |  2009-12-23  |  1.6 MB  |  41,307 lines

Text Truncated. Only the first 1MB is shown below. Download the file for the complete contents.
  1.  
  2. var EBConduitHelper_CT2384137 =
  3. {
  4.     CommonID: 'Common',
  5.  
  6.     GetId: function(bIsCommon) {
  7.         var strId = (bIsCommon) ? this.CommonID : "CT2384137";
  8.         return strId;
  9.     },
  10.  
  11.     stroreKey: function(strKey, strValue, bIsCommon) {
  12.         var strCTID = this.GetId(bIsCommon);
  13.  
  14.         try {
  15.             var objHelper = oToolbar_CT2384137.keysStorage.manager;
  16.  
  17.             objHelper.storeKey(strCTID, strKey, strValue);
  18.         }
  19.         catch (e) {
  20.             EBLogging_CT2384137.LogToConsole(e);
  21.         }
  22.     },
  23.  
  24.     retrieveKey: function(strKey, bIsCommon) {
  25.         var strCTID = this.GetId(bIsCommon);
  26.  
  27.         try {
  28.             var objHelper = oToolbar_CT2384137.keysStorage.manager;
  29.  
  30.             var strValue = objHelper.retrieveKey(strCTID, strKey);
  31.             return strValue;
  32.         }
  33.         catch (e) {
  34.             EBLogging_CT2384137.LogToConsole(e);
  35.         }
  36.     },
  37.  
  38.     deleteKey: function(strKey, bIsCommon) {
  39.         var strCTID = this.GetId(bIsCommon);
  40.  
  41.         try {
  42.             var objHelper = oToolbar_CT2384137.keysStorage.manager;
  43.  
  44.             objHelper.deleteKey(strCTID, strKey);
  45.         }
  46.         catch (e) {
  47.             EBLogging_CT2384137.LogToConsole(e);
  48.         }
  49.     },
  50.  
  51.     update404redirectUrl: function(strUrl, bIsRemove, bIaAll) {
  52.         if (strUrl) {
  53.             try {
  54.                 strUrl = EBActionManager_CT2384137.ConvertAliasesUrl(strUrl);
  55.  
  56.                 var objHelper = oToolbar_CT2384137.fix404.manager;
  57.  
  58.                 if (bIsRemove)
  59.                     if (bIaAll)
  60.                     objHelper.unregisterAllWindows404redirectUrl(strUrl, EBGlobalConsts_CT2384137.ToolbarCTID);
  61.                 else
  62.                     objHelper.unregisterSingleWindow404redirectUrl(strUrl, EBGlobalConsts_CT2384137.ToolbarCTID);
  63.                 else
  64.                     if (bIaAll)
  65.                     objHelper.registerAllWindows404redirectUrl(strUrl, EBGlobalConsts_CT2384137.ToolbarCTID);
  66.                 else
  67.                     objHelper.registerSingleWindow404redirectUrl(strUrl, EBGlobalConsts_CT2384137.ToolbarCTID);
  68.             }
  69.             catch (e) {
  70.                 EBLogging_CT2384137.LogToConsole(e);
  71.             }
  72.         }
  73.     }
  74. }
  75.  
  76.         
  77.  
  78.  
  79. // new encryption class
  80. // the old class adds some illigal chars when used on small strings 
  81. var EBEncryption_CT2384137 =
  82. {
  83.     keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  84.     hexStr : "0123456789ABCDEF",
  85.  
  86.    encodeHex : function(input) {
  87.       var output = "";
  88.       var chr1 = "";
  89.       var enc1, enc2 = "";
  90.       var i = 0;
  91.  
  92.       do {
  93.          chr1 = input.charCodeAt(i++);
  94.          enc1 = chr1 >> 4;
  95.          enc2 = chr1 & 15;
  96.          output = output + this.hexStr.charAt(enc1) + this.hexStr.charAt(enc2);
  97.       } while (i < input.length);
  98.       return output;
  99.    },
  100.    
  101.    decodeHex : function(input) {
  102.       var output = "";
  103.       var chr1, chr2 = "";
  104.       var enc1 = "";
  105.       var i = 0;
  106.  
  107.       // remove all characters that are not A-F, a-F, or 0-9
  108.       input = input.replace(/[^A-Fa-f0-9]/g, "");
  109.       input = input.toUpperCase();
  110.  
  111.       do {
  112.          chr1 = this.hexStr.indexOf(input.charAt(i++));
  113.          chr2 = this.hexStr.indexOf(input.charAt(i++));
  114.          enc1 = chr2 | (chr1 << 4);
  115.          output = output + String.fromCharCode(enc1);
  116.       } while (i < input.length);
  117.       return output;
  118.    },
  119.  
  120.    encode64 : function(input) {
  121.       var output = "";
  122.       var chr1, chr2, chr3 = "";
  123.       var enc1, enc2, enc3, enc4 = "";
  124.       var i = 0;
  125.  
  126.       do {
  127.          chr1 = input.charCodeAt(i++);
  128.          chr2 = input.charCodeAt(i++);
  129.          chr3 = input.charCodeAt(i++);
  130.  
  131.          enc1 = chr1 >> 2;
  132.          enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  133.          enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  134.          enc4 = chr3 & 63;
  135.  
  136.          if (isNaN(chr2)) {
  137.             enc3 = enc4 = 64;
  138.          } else if (isNaN(chr3)) {
  139.             enc4 = 64;
  140.          }
  141.  
  142.          output = output +
  143.             this.keyStr.charAt(enc1) +
  144.             this.keyStr.charAt(enc2) +
  145.             this.keyStr.charAt(enc3) +
  146.             this.keyStr.charAt(enc4);
  147.          chr1 = chr2 = chr3 = "";
  148.          enc1 = enc2 = enc3 = enc4 = "";
  149.       } while (i < input.length);
  150.  
  151.       return output;
  152.    },
  153.  
  154.    decode64 : function(input) {
  155.       var output = "";
  156.       var chr1, chr2, chr3 = "";
  157.       var enc1, enc2, enc3, enc4 = "";
  158.       var i = 0;
  159.  
  160.       // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
  161.       input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  162.  
  163.       do {
  164.          enc1 = this.keyStr.indexOf(input.charAt(i++));
  165.          enc2 = this.keyStr.indexOf(input.charAt(i++));
  166.          enc3 = this.keyStr.indexOf(input.charAt(i++));
  167.          enc4 = this.keyStr.indexOf(input.charAt(i++));
  168.  
  169.          chr1 = (enc1 << 2) | (enc2 >> 4);
  170.          chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  171.          chr3 = ((enc3 & 3) << 6) | enc4;
  172.  
  173.          output = output + String.fromCharCode(chr1);
  174.  
  175.          if (enc3 != 64) {
  176.             output = output + String.fromCharCode(chr2);
  177.          }
  178.          if (enc4 != 64) {
  179.             output = output + String.fromCharCode(chr3);
  180.          }
  181.  
  182.          chr1 = chr2 = chr3 = "";
  183.          enc1 = enc2 = enc3 = enc4 = "";
  184.  
  185.       } while (i < input.length);
  186.  
  187.       return output;
  188.    }
  189. }
  190.  
  191. function parseBool(str) {
  192.     if (!str) return false;
  193.  
  194.     return str.toLowerCase() == "true";
  195. };
  196.  
  197. function dumpAllProp(obj) {
  198.     if(!obj) return;
  199.  
  200.     for (var i in obj) EBLog(i + " = " + obj[i]);
  201. };
  202.  
  203. if (typeof (stringFormat) == "undefined") {
  204.     stringFormat = function(strText) {
  205.         if (arguments.length <= 1) return strText;
  206.         var replaceString = "";
  207.         for (var i = 0; i < arguments.length - 1; i++) {
  208.             replaceString = "{" + i.toString() + "}";
  209.             strText = strText.replace(replaceString, arguments[i + 1]);
  210.         }
  211.  
  212.         return strText;
  213.     };
  214. }
  215.  
  216. if (typeof (stringEquals) == "undefined") {
  217.     stringEquals = function(str1, str2, bIgnoreCase) {
  218.         if (!str1 && !str2)
  219.             return true;
  220.         else if (!str1 || !str2)
  221.             return false;
  222.         else {
  223.             if (bIgnoreCase)
  224.                 return str1.toLowerCase() == str2.toLowerCase();
  225.             else
  226.                 return str1 == str2;
  227.         }
  228.     };
  229. }
  230.  
  231. //global array collection object
  232. function EBArrayCollection_CT2384137()
  233. {
  234.     this.Arr = null;
  235.     
  236.     this.Init = function()
  237.     {
  238.         this.Arr = new Array();
  239.     };
  240.     
  241.     this.AppendElement = function(objElement)
  242.     {
  243.         this.Arr[this.Arr.length] = objElement;
  244.     };
  245.     
  246.     this.InsertElement = function(iIndex,objElement)
  247.     {
  248.         this.Arr.splice(iIndex,0,objElement);
  249.     };
  250.     
  251.     this.RemoveElement = function(iIndex)
  252.     {
  253.         this.Arr.splice(iIndex,1);    
  254.     };
  255.     
  256.     this.GetItem = function(iIndex)
  257.     {
  258.         var oItem = null;
  259.         if(this.Arr[iIndex])
  260.         {
  261.             oItem = this.Arr[iIndex];
  262.         }
  263.         return oItem;    
  264.     };
  265.  
  266.     this.Clear = function()
  267.     {
  268.         this.Init();    
  269.     };
  270.     
  271.     this.Init();
  272. }
  273.  
  274. var EBGlobalManager_CT2384137 =
  275. {
  276.     NSISound: Components.classes["@mozilla.org/sound;1"].createInstance(Components.interfaces.nsISound),
  277.  
  278.     htmlDecode: function(encodedString) {
  279.         return encodedString.replace(/&#([0-9]+);/g, function(a, b) { return String.fromCharCode(b); });
  280.     },
  281.  
  282.     //support for firefox hidden window, 
  283.     // be carefull, this window will be dropped in the future.
  284.     HiddenWindow: function() {
  285.         var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"]
  286.          .getService(Components.interfaces.nsIAppShellService)
  287.          .hiddenDOMWindow;
  288.         return hiddenWindow;
  289.     },
  290.  
  291.     GetAllTabs: function() {
  292.         var objTab = null;
  293.         var arrTabs = new Array();
  294.  
  295.         for (var i = 0; i < gBrowser.browsers.length; i++)
  296.             arrTabs.push(gBrowser.getBrowserAtIndex(i));
  297.  
  298.         return arrTabs;
  299.     },
  300.  
  301.     // Return true / false attribute from element as real boolean type.
  302.     GetBooleanAttribute: function(xulElement, strAttribute, bDefault) {
  303.         var strAttributeValue = xulElement.getAttribute(strAttribute);
  304.         return this.StringToBoolean(strAttributeValue, bDefault);
  305.     },
  306.  
  307.     StringToBoolean: function(strBoolean, bDefault) {
  308.         bDefault = (typeof bDefault == 'undefined') ? false : bDefault;
  309.  
  310.         if (!strBoolean)
  311.             return bDefault;
  312.  
  313.         switch (strBoolean.toLowerCase()) {
  314.             case 'true': return true; break;
  315.             case 'false': return false; break;
  316.             default: return bReturn;
  317.         }
  318.     },
  319.  
  320.     IsLastWindowInstance: function() {
  321.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  322.                         .getService(Components.interfaces.nsIWindowMediator);
  323.  
  324.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  325.  
  326.         return !objEnumerator.hasMoreElements();
  327.     },
  328.  
  329.     IsLanguageRtl: function(strLanguage) {
  330.         if (!strLanguage || typeof (strLanguage) == "undefined")
  331.             return false;
  332.  
  333.         strLanguage = strLanguage.toLowerCase();
  334.         if (strLanguage.indexOf('he') != -1 || strLanguage.indexOf('ar') != -1) {
  335.             return true;
  336.         }
  337.  
  338.         return false;
  339.  
  340.     },
  341.  
  342.     //relyes on preference language
  343.     GetUserAgentDirection: function() {
  344.         var oWindow = this.GetMostRecentBrowserWindow();
  345.         var xulMainWindow = oWindow.document.getElementById('main-window');
  346.         var curDirection = oWindow.document.defaultView.getComputedStyle(xulMainWindow, null).getPropertyValue("direction");
  347.  
  348.         return curDirection;
  349.     },
  350.  
  351.     IsUserAgentRtl: function() {
  352.         var dir = this.GetUserAgentDirection();
  353.         if (dir == 'rtl')
  354.             return true;
  355.         else
  356.             return false;
  357.     },
  358.  
  359.     IsReverseDialogs: function() {
  360.         var prefName = EBPreferenceConsts_CT2384137.DialogsAlignMode;
  361.         var direction = EBToolbarPreferenceManager_CT2384137.GetPref(prefName, true);
  362.         if (!this.IsUserAgentRtl() && direction == "RTL") {
  363.             return "rtl";
  364.         }
  365.         else if (this.IsUserAgentRtl() && direction == "LTR") {
  366.             return "ltr";
  367.         }
  368.         else {
  369.             return false;
  370.         }
  371.     },
  372.  
  373.     IsToolbarRTL: function() {
  374.         //return EBGlobalConsts_CT2384137.IsToolbarReversed == EBUILogic_Toolbar_CT2384137.Consts.RTL;
  375.         var xulToolbar = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarInstance;
  376.         return document.defaultView.getComputedStyle(xulToolbar, null).getPropertyValue("direction") == EBUILogic_Toolbar_CT2384137.Consts.RTL;
  377.     },
  378.  
  379.     IsLocaleRTL: function() {
  380.         var prefName = EBPreferenceConsts_CT2384137.DialogsAlignMode;
  381.         if (EBToolbarPreferenceManager_CT2384137.GetPref(prefName, true) == "RTL") {
  382.             return true;
  383.         }
  384.         else {
  385.             return false;
  386.         }
  387.     },
  388.  
  389.     //returns real toolbar's direction based on drown toolbar
  390.     GetToolbarDir: function() {
  391.         var oToolbar = document.getElementById('iobitcom');
  392.         var curDirection = document.defaultView.getComputedStyle(oToolbar, null).getPropertyValue("direction");
  393.         return curDirection;
  394.     },
  395.  
  396.     DateTimeStringToInt: function(strDateTime) {
  397.         var iDateTime = 0;
  398.  
  399.         if (strDateTime)
  400.             iDateTime = Date.parse(strDateTime);
  401.  
  402.         return iDateTime;
  403.     },
  404.  
  405.     Initialize: function() {
  406.         if (this.NSISound) {
  407.             this.NSISound.init();
  408.         }
  409.     },
  410.  
  411.     ToStripHTML: function(strText) {
  412.         strText = EBXML_CT2384137.FromLegalXml(strText);
  413.  
  414.         var FLAG_SKIP = 0;
  415.         var FLAG_WRITE = 1;
  416.  
  417.         var iFlagState = FLAG_WRITE;
  418.         var strClean = '';
  419.         var chr = '';
  420.         for (var i = 0; i < strText.length; i++) {
  421.             chr = strText[i];
  422.             if (chr == '<') {
  423.                 iFlagState = FLAG_SKIP;
  424.             }
  425.             else if (chr == '>') {
  426.                 iFlagState = FLAG_WRITE;
  427.             }
  428.             else if (iFlagState == FLAG_WRITE) {
  429.                 strClean += chr;
  430.             }
  431.         }
  432.  
  433.         return strClean;
  434.  
  435.  
  436.     },
  437.  
  438.     IsFunctionNotLink: function(strURL) {
  439.         if (strURL.indexOf("EBOpenPopHtml") != -1)
  440.             return true;
  441.  
  442.         return false;
  443.     },
  444.  
  445.     IsLegalCTID: function(strCTID) {
  446.         var oRegTemplate = /^CT\d+$/i;
  447.         return oRegTemplate.test(strCTID);
  448.     },
  449.  
  450.     IsDomainExists: function(strDomain) {
  451.         var arrDomains = EBGlobalConsts_CT2384137.Domains;
  452.         for (var i = 0; i < arrDomains.length; i++) {
  453.             if (arrDomains[i] == strDomain.toLowerCase()) {
  454.                 return true;
  455.             }
  456.         }
  457.  
  458.         return false;
  459.     },
  460.  
  461.     IsCharWhitespace: function(ch) {
  462.         return /^\s$/.test(ch);
  463.     },
  464.  
  465.     IsCharPunctuation: function(ch) {
  466.         return /[`~!@#$%^&\*()-+={}\[\]|\\:;\"<>,\.\?\/]/.test(ch);
  467.     },
  468.  
  469.     IsValidEMail: function(strEMail) {
  470.         return /^([0-9a-zA-Z]([-.\w_])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/.test(strEMail);
  471.     },
  472.  
  473.     GetParametersFromStringFunctionName: function(strUrl, strFunctionName) {
  474.         strUrl = unescape(strUrl);
  475.         strUrl = strUrl.substr(strUrl.indexOf(strFunctionName));
  476.         strUrl = strUrl.replace(/"/g, '');
  477.         strUrl = strUrl.replace(/'/g, "");
  478.         var iStart = strUrl.indexOf('(') + 1;
  479.         var iEnd = strUrl.indexOf(')');
  480.         var strParams = strUrl.substring(iStart, iEnd);
  481.         var arrParams = strParams.split(',');
  482.  
  483.         return arrParams;
  484.     },
  485.  
  486.     IsWordCharacter: function(ch) {
  487.         if (ch == null || (typeof ch != "string" || ch.length != 1)) {
  488.             return false;
  489.         }
  490.         var code = ch.charCodeAt(0);
  491.         return code >= 48 && code <= 57 || (code >= 65 && code <= 90 || (code >= 97 && code <= 122 || (code >= 138 && code <= 142 || (code >= 154 && code <= 159 || code >= 192 && code <= 255))))
  492.     },
  493.  
  494.     BeginsWith: function(str, pref) {
  495.         return str.substring(0, pref.length).toUpperCase() == pref.toUpperCase();
  496.     },
  497.  
  498.     EndsWith: function(str, pref) {
  499.         var iIndex = str.length - pref.length;
  500.         return str.substring(iIndex).toLowerCase() == pref.toLowerCase();
  501.     },
  502.  
  503.     TotalTrim: function(str) {
  504.         str = str.replace(/\s/g, '');
  505.         return str;
  506.     },
  507.  
  508.     TrimToOne: function(str) {
  509.         // Return empty if nothing was passed in
  510.         if (!str) return "";
  511.  
  512.         str = this.Trim(str);
  513.  
  514.         // Replace any multiple whitespace characters with a single space
  515.         str = str.replace(/\s+/g, ' ');
  516.  
  517.         // Return the altered string
  518.         return str;
  519.     },
  520.  
  521.     Trim: function(str) {
  522.         if (!str || !str.replace)
  523.             return null;
  524.  
  525.         str = str.replace(/^\s+/, '');
  526.         str = str.replace(/\s+$/, '');
  527.  
  528.         return str;
  529.     },
  530.  
  531.     IsPathExists: function(strPath) {
  532.         var bExists = false;
  533.  
  534.         try {
  535.             var oFile = Components.classes["@mozilla.org/file/local;1"]
  536.                                     .createInstance(Components.interfaces.nsILocalFile);
  537.             oFile.initWithPath(strPath);
  538.  
  539.             bExists = oFile.exists();
  540.         }
  541.         catch (ex) {
  542.             bExists = false;
  543.         }
  544.  
  545.         return bExists;
  546.     },
  547.  
  548.     GetEnvironmentArg: function(strAlias) {
  549.         var oEnvironment = Components.classes["@mozilla.org/process/environment;1"]
  550.                                     .getService(Components.interfaces.nsIEnvironment);
  551.         var strArg = oEnvironment.get(strAlias);
  552.  
  553.         return strArg;
  554.     },
  555.  
  556.     PlaySound: function(strAudioFilePath) {
  557.         var objURI = null;
  558.         var objIOService = Components.classes["@mozilla.org/network/io-service;1"].createInstance(Components.interfaces.nsIIOService);
  559.         var objFile = EBFileIO_CT2384137.open(strAudioFilePath);
  560.  
  561.         if (objFile)
  562.             objURI = objIOService.newFileURI(objFile);
  563.         else
  564.             objURI = objIOService.newURI(strAudioFilePath, null, null);
  565.  
  566.         this.NSISound.play(objURI);
  567.     },
  568.  
  569.     ToLegalFileName: function(strText) {
  570.         strText = strText.replace(/\.|\\|\/|\:|\*|\?|\&\;|\&|\"|\<|\>|\|/g, '_');
  571.  
  572.         if (strText.length > 160)
  573.             strText = EB_MD5Hash_CT2384137.MD5(strText);
  574.  
  575.         return strText;
  576.     },
  577.  
  578.     Alert: function(objWindow, strTitle, strMsg) {
  579.         var objPromptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  580.                             .getService(Components.interfaces.nsIPromptService);
  581.  
  582.         objPromptService.alert(objWindow, strTitle, strMsg);
  583.     },
  584.  
  585.     Confirm: function(objWindow, strTitle, strMsg) {
  586.         var objPromptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  587.                             .getService(Components.interfaces.nsIPromptService);
  588.  
  589.         return objPromptService.confirm(objWindow, strTitle, strMsg);
  590.     },
  591.  
  592.     //var chkboxResponse = {value: false};
  593.     ConfirmCheck: function(objWindow, strTitle, strMsg, strCheckboxText, chkboxResponse) {
  594.         var objPromptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  595.                             .getService(Components.interfaces.nsIPromptService);
  596.  
  597.         return objPromptService.confirmCheck(objWindow, strTitle, strMsg, strCheckboxText, chkboxResponse);
  598.     },
  599.  
  600.     OpenDefaultMailClient: function() {
  601.         var objShell = getShellService();
  602.         try {
  603.             if (objShell) {
  604.                 var iAppToOpen = Components.interfaces.nsIShellService.APPLICATION_MAIL;
  605.  
  606.                 if (objShell.openApplication)
  607.                     objShell.openApplication(iAppToOpen);
  608.                 else if (objShell.openPreferredApplication)
  609.                     objShell.openPreferredApplication(iAppToOpen);
  610.             }
  611.         }
  612.         catch (e) {
  613.             if (this.IsWindowsPlatform()) {
  614.                 var strPath = EBRegistryManager_CT2384137.GetRegistryEntry(EBRegistryManager_CT2384137.HKEY_CLASSES_ROOT, 'mailto\\shell\\open\\command', '');
  615.                 var bSuccess = EBWindows_CT2384137.WindowsShellDirectExecute(strPath, null, true);
  616.                 if (!bSuccess) {
  617.                     var iStart = strPath.indexOf('"');
  618.                     var iEnd = strPath.indexOf('"', iStart + 1);
  619.                     var strAppPath = strPath.substring(iStart + 1, iEnd);
  620.                     bSuccess = EBWindows_CT2384137.WindowsShellDirectExecute(strAppPath, null, true);
  621.                 }
  622.             }
  623.         }
  624.     },
  625.  
  626.     GetEndOfLine: function() {
  627.         return '\r\n';
  628.     },
  629.  
  630.     IsFirefox3: function() {
  631.         var objXULApp = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
  632.         var platformVersion = objXULApp.platformVersion;
  633.         var strGeckoVer = "1.9.0.0"; //FF3 gecko version
  634.         var iCompare = this.compareVersions(platformVersion, strGeckoVer);
  635.         return (iCompare >= 0)
  636.     },
  637.  
  638.     IsFirefox35: function() {
  639.         var objXULApp = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
  640.         var platformVersion = objXULApp.platformVersion;
  641.         var strGeckoVer = "1.9.1.0"; //FF3.5 gecko version
  642.         var iCompare = this.compareVersions(platformVersion, strGeckoVer);
  643.         return (iCompare >= 0)
  644.     },
  645.     IsFirefox36: function() {
  646.         var objXULApp = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
  647.         var platformVersion = objXULApp.platformVersion;
  648.         var strGeckoVer = "1.9.2.0"; //FF3.6 gecko version
  649.         var iCompare = this.compareVersions(platformVersion, strGeckoVer);
  650.         return (iCompare >= 0)
  651.     },
  652.  
  653.     GetBrowserName: function() {
  654.         var strBrowserName = '';
  655.  
  656.         if ("@mozilla.org/windows-registry-key;1" in Components.classes) //1.5
  657.         {
  658.             var objXULApp = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
  659.             strBrowserName = objXULApp.name;
  660.         }
  661.         else //1.0.x
  662.         {
  663.             strBrowserName = navigator.vendor;
  664.         }
  665.  
  666.         return strBrowserName;
  667.     },
  668.  
  669.     GetBrowserVersion: function() {
  670.         var strBrowserVersion = '';
  671.         var objXULApp = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
  672.         strBrowserVersion = objXULApp.version;
  673.  
  674.         return strBrowserVersion;
  675.     },
  676.  
  677.     GetBrowserNameAndVersion: function() {
  678.         return this.GetBrowserName() + "_" + this.GetBrowserVersion();
  679.     },
  680.  
  681.     IsFirefoxBrowser: function() {
  682.         var strBrowserName = this.GetBrowserName();
  683.         return strBrowserName.toLowerCase() == 'firefox';
  684.     },
  685.  
  686.     IsNewestBrowserAPI: function() {
  687.         return this.GetBrowserVersion() >= '1.5' || !this.IsFirefoxBrowser();
  688.     },
  689.  
  690.     GetMostRecentBrowserWindow: function() {
  691.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  692.                         .getService(Components.interfaces.nsIWindowMediator);
  693.  
  694.         //get the last browser window active(this is actually it parent
  695.         var objRecentBrowserWindow = objWindowsManager.getMostRecentWindow('navigator:browser');
  696.  
  697.         return objRecentBrowserWindow;
  698.     },
  699.  
  700.     GetAllWindows: function() {
  701.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  702.                     .getService(Components.interfaces.nsIWindowMediator);
  703.  
  704.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  705.         var arrWindows = new Array();
  706.         while (objEnumerator.hasMoreElements())
  707.             arrWindows.push(objEnumerator.getNext());
  708.  
  709.         return arrWindows;
  710.     },
  711.  
  712.     GetXULWindowByTypeAndName: function(strWindowType, strWindowName) {
  713.         var oWindowsManager = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  714.                         .getService(Components.interfaces.nsIWindowMediator);
  715.  
  716.         var oEnumerator = oWindowsManager.getEnumerator(strWindowType);
  717.  
  718.         while (oEnumerator.hasMoreElements()) {
  719.             var oWindow = oEnumerator.getNext();
  720.  
  721.             if (oWindow.name == strWindowName) {
  722.                 return oWindow;
  723.             }
  724.         }
  725.  
  726.         return null;
  727.     },
  728.  
  729.     GetWebPageJavascriptObject: function(oContentWindow) {
  730.         var oJavascript = null;
  731.  
  732.         try {
  733.             if (oContentWindow)
  734.                 oJavascript = oContentWindow.wrappedJSObject ? oContentWindow.wrappedJSObject : oContentWindow;
  735.         }
  736.         catch (ex) { }
  737.  
  738.         return oJavascript;
  739.     },
  740.  
  741.     IsWindowsPlatform: function() {
  742.         var strPlatform = navigator.platform.toLowerCase();
  743.         return strPlatform.indexOf('win') != -1 ? true : false;
  744.     },
  745.  
  746.     IsLinuxPlatform: function() {
  747.         var strPlatform = navigator.platform.toLowerCase();
  748.         return strPlatform.indexOf('linux') != -1 ? true : false;
  749.     },
  750.  
  751.     IsMacintoshPlatform: function() {
  752.         var strPlatform = navigator.platform.toLowerCase();
  753.         return strPlatform.indexOf('mac') != -1 ? true : false;
  754.     },
  755.  
  756.     GetOS: function() {
  757.         try {
  758.             var strUserAgent = navigator.userAgent;
  759.             var iStart = strUserAgent.indexOf('(');
  760.             var iEnd = strUserAgent.indexOf(')');
  761.             var strPlatformData = strUserAgent.substring(iStart, iEnd);
  762.             var arrData = strPlatformData.split(';');
  763.             return EBGlobalManager_CT2384137.Trim(arrData[2]);
  764.         }
  765.         catch (e) {
  766.             return '';
  767.         }
  768.     },
  769.  
  770.     IsInArray: function(arr, strText) {
  771.         for (var i = 0; i < arr.length; i++) {
  772.             if (arr[i] == strText) {
  773.                 return i;
  774.             }
  775.         }
  776.  
  777.         return -1;
  778.     },
  779.  
  780.     //get the index of a dom element referring to it's parent
  781.     GetDOMElementIndex: function(objDOMElement) {
  782.         var objDOMParentElement = objDOMElement.parentNode;
  783.         if (objDOMParentElement) {
  784.             for (var i = 0; i < objDOMParentElement.childNodes.length; i++) {
  785.                 if (objDOMParentElement.childNodes[i] == objDOMElement) {
  786.                     return i;
  787.                 }
  788.             }
  789.         }
  790.  
  791.         return -1;
  792.     },
  793.  
  794.     GenerateRandomNumber: function() {
  795.         var iNum = Math.ceil(Math.random() * 10000000000000);
  796.  
  797.         return iNum;
  798.     },
  799.  
  800.     IsElementInScreenCoordinates: function(objElement) {
  801.         var iElementX = objElement.boxObject.screenX;
  802.         var iElementY = objElement.boxObject.screenY;
  803.         var iElementWidth = objElement.boxObject.width;
  804.         var iElementHeight = objElement.boxObject.height;
  805.  
  806.  
  807.         //get the global screen coordinates
  808.         var iScreenX = EBGlobalVariables_CT2384137.ScreenCoordinateX;
  809.         var iScreenY = EBGlobalVariables_CT2384137.ScreenCoordinateY;
  810.  
  811.         if (iScreenX >= iElementX &&
  812.             iScreenX <= (iElementX + iElementWidth) &&
  813.             iScreenY >= iElementY &&
  814.             iScreenY <= (iElementY + iElementHeight)) {
  815.             return true;
  816.         }
  817.         else {
  818.             return false;
  819.         }
  820.     },
  821.  
  822.     SendFeedback: function(which) {
  823.         var strURL = '';
  824.         var oWindow = this.GetMostRecentBrowserWindow()
  825.         var strAdditional = '';
  826.  
  827.         switch (which) {
  828.             case "weather":
  829.                 strAdditional = EBGlobalConsts_CT2384137.FeedbackURL.Weather + EBGlobalManager_CT2384137.GetBrowserName();
  830.                 strURL = oWindow.EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  831.                 strURL = EBUrl_CT2384137.LegalizeLinkUrl(strURL);
  832.                 oWindow.EBWeb_CT2384137.LoadURL(strURL);
  833.                 break;
  834.             case "emailNotifier":
  835.                 strAdditional = EBGlobalConsts_CT2384137.FeedbackURL.EmailNotifier + EBGlobalManager_CT2384137.GetBrowserName();
  836.                 strURL = oWindow.EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  837.                 strURL = EBUrl_CT2384137.LegalizeLinkUrl(strURL);
  838.                 EBWeb_CT2384137.LoadURLInNewWindow(strURL);
  839.                 break;
  840.             case "radio":
  841.                 strAdditional = EBGlobalConsts_CT2384137.FeedbackURL.Radio + EBGlobalManager_CT2384137.GetBrowserName();
  842.                 strURL = oWindow.EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  843.                 strURL = EBUrl_CT2384137.LegalizeLinkUrl(strURL);
  844.                 EBWeb_CT2384137.LoadURLInNewWindow(strURL);
  845.                 break;
  846.         }
  847.     },
  848.  
  849.     GetGadgetInfoFromLink: function(strURL, oEvent, strParentId) {
  850.         var objData = new Object();
  851.         objData.url = strURL.substring(strURL.indexOf("(") + 1, strURL.indexOf(","));
  852.         objData.url = objData.url.replace(/\\'/g, "");
  853.         objData.url = objData.url.replace(/"/g, '');
  854.         objData.url = objData.url.replace(/'/g, "");
  855.  
  856.         objData.title = oEvent.target.label;
  857.         objData.titleIcon = oEvent.target.image;
  858.         objData.width = parseInt(strURL.substring(strURL.indexOf(",") + 1, strURL.lastIndexOf(",")));
  859.         objData.height = parseInt(strURL.substring(strURL.lastIndexOf(",") + 1, strURL.indexOf(")")));
  860.  
  861.         if (strParentId) {
  862.             var xulButton = document.getElementById(strParentId);
  863.  
  864.             if (xulButton) {
  865.                 objData.screenX = xulButton.boxObject.screenX;
  866.                 objData.screenY = xulButton.boxObject.screenY + xulButton.boxObject.height;
  867.             }
  868.         }
  869.         else {
  870.             objData.screenX = oEvent.target.boxObject.screenX;
  871.             objData.screenY = oEvent.target.boxObject.screenY + oEvent.target.boxObject.height;
  872.         }
  873.  
  874.         return objData;
  875.     },
  876.  
  877.     copyToClipboard: function(strText) {
  878.         var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"]
  879.                 .getService(Components.interfaces.nsIClipboardHelper);
  880.         gClipboardHelper.copyString(strText);
  881.     },
  882.  
  883.     compareVersions: function(strVer1, strVer2) {
  884.         var oVersionCompare = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  885.                                         .createInstance(Components.interfaces.nsIVersionComparator);
  886.         return oVersionCompare.compare(strVer1, strVer2);
  887.     },
  888.  
  889.     //first level clone only (clones simple values, object remeins unloned, but referenced)
  890.     cloneObject: function(obj) {
  891.         if (typeof (obj) != "object") return obj;
  892.         if (obj == null) return obj;
  893.  
  894.         var newObj = new Object();
  895.  
  896.         for (var i in obj)
  897.             newObj[i] = obj[i];
  898.  
  899.         return newObj;
  900.     },
  901.  
  902.     GetSystemLocale: function() {
  903.         var strLocale = "en-US";
  904.         try {
  905.             var strLocale = Components.classes["@mozilla.org/intl/nslocaleservice;1"]
  906.                                                 .getService(Components.interfaces.nsILocaleService)
  907.                                                 .getLocaleComponentForUserAgent()
  908.                                                 .getCategory("NSILOCALE_CTYPE");
  909.         }
  910.         catch (ex) {
  911.             EBLog(ex);
  912.         }
  913.  
  914.         return strLocale;
  915.     }
  916. };
  917.  
  918. /**************************** global vars & constants ******************************/
  919.  
  920. var EBGlobalVariables_CT2384137 =
  921. {
  922.     ScreenCoordinateX: 0,
  923.     ScreenCoordinateY: 0
  924. };
  925.  
  926. var EBGlobalConsts_CT2384137 =
  927. {
  928.     ToolbarId: 'iobitcom',
  929.     ToolbarPublisherContainerId: "toolbar_iobitcom",
  930.     ToolbarMyStuffContainerId: "mystuff_iobitcom",
  931.     MyStuffSplitterId: "MyStuffContainerSplitter_CT2384137",
  932.     MyStuffSeparatorId: "MyStuffContainerSeparator_CT2384137",
  933.     ToolbarName: 'IObitCom',
  934.     ToolbarCTID: 'CT2384137',
  935.     SuggestHistoryFolderName: 'EBSuggestHistory',
  936.     GUID: '{31c7d459-9cc3-44f2-9dca-fc11795309b4}',
  937.     ToolbarVersion: '2.5.2.14',
  938.     ShowUninstallPage: true,
  939.     WebServerUrl: 'http://IObitCom.OurToolbar.com/',
  940.     ServerUrl: 'http://users.conduit.com',
  941.     ChromeContentPath: 'chrome://iobitcom/content/',
  942.     ChromeSkinPath: 'chrome://iobitcom/skin/',
  943.     Delimiter: '||',
  944.     DefaultCharset: 'UTF-8',
  945.     Domains: ['info', 'biz', 'name', 'pro', 'museum', 'coop', 'aero', 'edu', 'gov', 'com', 'net', 'tv', 'fm', 'us', 'cc', 'jobs', 'ws', 'ad', 'ae', 'af', 'ao', 'aq', 'ar', 'at', 'au', 'bb', 'be', 'bg', 'br', 'ca', 'ch', 'ck', 'cl', 'cn', 'co', 'cs', 'cy', 'de', 'dk', 'dz', 'ec', 'eg', 'es', 'fi', 'fj', 'fr', 'gb', 'gl', 'gov', 'gr', 'hk', 'hr', 'hu', 'id', 'ie', 'il', 'in', 'iq', 'is', 'it', 'jm', 'jp', 'lb', 'lu', 'lv', 'ly', 'ma', 'mc', 'mil', 'mk', 'mo', 'mr', 'mn', 'mt', 'mu', 'mx', 'my', 'nc', 'net', 'nf', 'nl', 'no', 'np', 'nz', 'org', 'pa', 'pe', 'pg', 'ph', 'pk', 'pl', 'pt', 'ro', 'sa', 'sb', 'se', 'sg', 'su', 'td', 'th', 'to', 'tw', 'uk', 'us', 'va', 'vg', 'za', 'zm'],
  946.     HTTP_PREFIX: 'http://',
  947.     FTP_PREFIX: 'ftp://',
  948.     BookmarkletPrefix: 'javascript:',
  949.     NetworkError: 'EB_NETWORK_ERROR',
  950.     DegreeSymbol: '\u00BA',
  951.     RegistryShellExecutePath: 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\',
  952.     ToolbarHorizontalDialogGap: 10,
  953.     ToolbarVerticalDialogGap: 40,
  954.     MultiCommunity: false,
  955.     Grouping: false,
  956.     ToolbarLanguage: 'EN',
  957.     IsToolbarReversed: false,
  958.     FixPageNotFoundErrorsEnabled: true,
  959.     FixPageNotFoundErrorsChecked: true,
  960.     FixPageNotFoundDefaultUrl: 'http://hosting.conduit.com/notfound/?ctid=EB_TOOLBAR_ID&actid=EB_TOOLBAR_ID&octid=EB_ORIGINAL_CTID',
  961.     EnableSearchFromAddress: true,
  962.     TrusteUrl: 'http://www.truste.org/pvr.php?page=validate&softwareProgramId=101&sealid=112',
  963.     LanguagePackUrl: "http://translation.users.conduit.com/Translation.ashx",
  964.     DefaultWebServerURL: "http://hosting.conduit.com/",
  965.     MyStuffServiceUrl: "http://mystuff.conduit-services.com/MyStuffService.ashx?ComponentId=EB_MY_STUFF_INSTANCE_GUID&lut=EB_MY_STUFF_LUT",
  966.     MyStuffSearchUrl: "http://search.conduit.com/Results.aspx?q=SEARCH_TERM&ctid=EB_TOOLBAR_ID&octid=EB_ORIGINAL_CTID&SearchType=ToolbarComponents",
  967.     MyStuffEnabled: false,
  968.     IsAMO: false,
  969.     IsSelectFromGroupingByLocale: false,
  970.     
  971.     Attributes:
  972.     {
  973.         XULLabel: 'EB_XUL_LABEL',
  974.         XULImage: 'EB_XUL_IMAGE',
  975.         XULElementIndex: 'EB_XUL_ELEMENT_INDEX',
  976.         XULTooltip: 'EB_XUL_TOOLTIP'
  977.     },
  978.  
  979.     Aliases:
  980.     {
  981.         MainFrameURL: 'EB_MAIN_FRAME_URL',
  982.         //ctid
  983.         ToolbarID: 'EB_TOOLBAR_ID',
  984.         UserID: 'EB_USER_ID',
  985.         SearchTerm: 'EB_SEARCH_TERM',
  986.         ToolbarVersion: 'EB_TOOLBAR_VERSION',
  987.         ToolbarOriginalID: 'EB_ORIGINAL_CTID',
  988.         MainFrameTitle: 'EB_MAIN_FRAME_TITLE',
  989.         ToolbarSubDomain: 'EB_TOOLBAR_SUB_DOMAIN'
  990.     },
  991.  
  992.     FeedbackURL:
  993.     {
  994.         Weather: 'feedback/?topic=Weather%20Feedback&version=2.5.2.14&platform=',
  995.         EmailNotifier: 'feedback/?topic=Email%20Notifier%20Feedback&version=2.5.2.14&platform=',
  996.         Radio: 'feedback/?topic=Radio%20Player%20Feedback&version=2.5.2.14&platform='
  997.     }
  998. };
  999.  
  1000. var EBForceRefreshFlags_CT2384137 =
  1001. {
  1002.     ALL: 0,
  1003.     SETTINGS: 1,
  1004.     CHAT: 2,
  1005.     RADIO: 4,
  1006.     GROUPING: 8,
  1007.     COMMUNITIES: 16,
  1008.     MY_STUFF: 32
  1009. };
  1010. //object represent collection holding hash and index array
  1011. //example use - the toolbar components
  1012. function EBArrayHashObject_CT2384137()
  1013. {
  1014.     this.IndexerArray    = null;
  1015.     this.HashArray        = null;
  1016.     
  1017.     this.Init = function()
  1018.     {
  1019.         this.IndexerArray    = new Array();
  1020.         this.HashArray        = new Array();
  1021.     };
  1022.     
  1023.     this.Add = function(strKeyID,objValue)
  1024.     {
  1025.         //check if already exists
  1026.         if(!this.Contains(strKeyID))
  1027.         {
  1028.             strKeyID = this.LegalizeHashKey(strKeyID);
  1029.             
  1030.             //add to the indexers array to the last place
  1031.             this.IndexerArray[this.IndexerArray.length] = objValue;
  1032.             
  1033.             //add to the hash array per component id
  1034.             this.HashArray[strKeyID]                    = objValue;
  1035.         }
  1036.     };
  1037.     
  1038.     this.Insert = function(iIndex,strKeyID,objValue)
  1039.     {    
  1040.         if(!this.Contains(strKeyID))
  1041.         {
  1042.             strKeyID = this.LegalizeHashKey(strKeyID);
  1043.             
  1044.             //add to the indexers array to the iIndex place
  1045.             this.IndexerArray.splice(iIndex,0,objValue);
  1046.             
  1047.             //add to the hash array per component id
  1048.             this.HashArray[strKeyID]        = objValue;
  1049.         }
  1050.     };
  1051.     
  1052.     this.Remove = function(iIndex,strKeyID)
  1053.     {
  1054.         if(this.Contains(strKeyID))
  1055.         {
  1056.             strKeyID = this.LegalizeHashKey(strKeyID);
  1057.             
  1058.             //remove from indexer array
  1059.             this.IndexerArray.splice(iIndex,1);
  1060.             
  1061.             //remove from hash
  1062.             delete this.HashArray[strKeyID];
  1063.         }
  1064.         
  1065.     };
  1066.     
  1067.     this.GetByIndex = function(iIndex)
  1068.     {
  1069.         var objValue = this.IndexerArray[iIndex];
  1070.         return objValue;
  1071.     };
  1072.     
  1073.     this.GetByID = function(strKeyID)
  1074.     {
  1075.         strKeyID = this.LegalizeHashKey(strKeyID);
  1076.         
  1077.         var objValue = this.HashArray[strKeyID];
  1078.         return objValue;
  1079.     };
  1080.     
  1081.     this.GetIndexByObjectValue = function(oValue)
  1082.     {
  1083.         for(var i=0;i<this.IndexerArray.length;i++)
  1084.         {
  1085.             if(this.GetByIndex(i) == oValue)
  1086.             {
  1087.                 return i;
  1088.             }
  1089.         }
  1090.         
  1091.         return -1;
  1092.     };
  1093.     
  1094.     this.Contains = function(strKeyID)
  1095.     {
  1096.         var objValue = this.GetByID(strKeyID);
  1097.         return objValue ? true : false;
  1098.     };
  1099.     
  1100.     this.Count = function()
  1101.     {
  1102.         return this.IndexerArray.length;
  1103.     };
  1104.     
  1105.     this.LegalizeHashKey = function(strKeyID)
  1106.     {
  1107.         strKeyID = strKeyID.toString();
  1108.         strKeyID = strKeyID.toUpperCase();
  1109.         
  1110.         return strKeyID;    
  1111.     };
  1112.     
  1113.     this.Clear = function()
  1114.     {
  1115.         this.Init();
  1116.     };
  1117.     
  1118.     this.Init();
  1119. }
  1120.  
  1121.  
  1122. if (typeof JSON == "undefined") {
  1123.     //FF3.5
  1124.     if (EBGlobalManager_CT2384137.IsFirefox35()) {
  1125.         //do nothing
  1126.     }
  1127.     //FF3
  1128.     else if (EBGlobalManager_CT2384137.IsFirefox3()) {
  1129.         var myJson = Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON);
  1130.         JSON = {};
  1131.         JSON.stringify = function(obj) { return myJson.encode(obj); };
  1132.         JSON.parse = function(str) { return myJson.decode(str); };
  1133.     }
  1134.     //FF2
  1135.     else {
  1136.         var myJson = {
  1137.             stringify: function(aJSObject, aKeysToDrop) {
  1138.                 var pieces = [];
  1139.  
  1140.                 function append_piece(aObj) {
  1141.                     if (typeof aObj == "string") {
  1142.                         aObj = aObj.replace(/[\\"\x00-\x1F\u0080-\uFFFF]/g, function($0) {
  1143.                             switch ($0) {
  1144.                                 case "\b": return "\\b";
  1145.                                 case "\t": return "\\t";
  1146.                                 case "\n": return "\\n";
  1147.                                 case "\f": return "\\f";
  1148.                                 case "\r": return "\\r";
  1149.                                 case '"': return '\\"';
  1150.                                 case "\\": return "\\\\";
  1151.                             }
  1152.                             return "\\u" + ("0000" + $0.charCodeAt(0).toString(16)).slice(-4);
  1153.                         });
  1154.                         pieces.push('"' + aObj + '"')
  1155.                     }
  1156.                     else if (typeof aObj == "boolean") {
  1157.                         pieces.push(aObj ? "true" : "false");
  1158.                     }
  1159.                     else if (typeof aObj == "number" && isFinite(aObj)) {
  1160.                         pieces.push(aObj.toString());
  1161.                     }
  1162.                     else if (aObj === null) {
  1163.                         pieces.push("null");
  1164.                     }
  1165.                     else if (aObj instanceof Array ||
  1166.                 typeof aObj == "object" && "length" in aObj &&
  1167.                 (aObj.length === 0 || aObj[aObj.length - 1] !== undefined)) {
  1168.                         pieces.push("[");
  1169.                         for (var i = 0; i < aObj.length; i++) {
  1170.                             arguments.callee(aObj[i]);
  1171.                             pieces.push(",");
  1172.                         }
  1173.                         if (aObj.length > 0)
  1174.                             pieces.pop(); // drop the trailing colon
  1175.                         pieces.push("]");
  1176.                     }
  1177.                     else if (typeof aObj == "object") {
  1178.                         pieces.push("{");
  1179.                         for (var key in aObj) {
  1180.                             // allow callers to pass objects containing private data which
  1181.                             // they don't want the JSON string to contain (so they don't
  1182.                             // have to manually pre-process the object)
  1183.                             if (aKeysToDrop && aKeysToDrop.indexOf(key) != -1)
  1184.                                 continue;
  1185.  
  1186.                             arguments.callee(key.toString());
  1187.                             pieces.push(":");
  1188.                             arguments.callee(aObj[key]);
  1189.                             pieces.push(",");
  1190.                         }
  1191.                         if (pieces[pieces.length - 1] == ",")
  1192.                             pieces.pop(); // drop the trailing colon
  1193.                         pieces.push("}");
  1194.                     }
  1195.                     else {
  1196.                         throw new TypeError("No JSON representation for this object!");
  1197.                     }
  1198.                 }
  1199.                 append_piece(aJSObject);
  1200.  
  1201.                 return pieces.join("");
  1202.             },
  1203.  
  1204.             /**
  1205.             * Converts a JSON string into a JavaScript object.
  1206.             *
  1207.             * @param aJSONString is the string to be converted
  1208.             * @return a JavaScript object for the given JSON representation
  1209.             */
  1210.             parse: function(aJSONString) {
  1211.                 if (!this.isMostlyHarmless(aJSONString))
  1212.                     throw new SyntaxError("No valid JSON string!");
  1213.  
  1214.                 var s = new Components.utils.Sandbox("about:blank");
  1215.                 return Components.utils.evalInSandbox("(" + aJSONString + ")", s);
  1216.             },
  1217.  
  1218.             /**
  1219.             * Checks whether the given string contains potentially harmful
  1220.             * content which might be executed during its evaluation
  1221.             * (no parser, thus not 100% safe! Best to use a Sandbox for evaluation)
  1222.             *
  1223.             * @param aString is the string to be tested
  1224.             * @return a boolean
  1225.             */
  1226.             isMostlyHarmless: function(aString) {
  1227.                 var maybeHarmful = /[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/;
  1228.                 var jsonStrings = /"(\\.|[^"\\\n\r])*"/g;
  1229.  
  1230.                 return !maybeHarmful.test(aString.replace(jsonStrings, ""));
  1231.             }
  1232.         }
  1233.         JSON = myJson;
  1234.     }
  1235. }
  1236. var EBLogging_CT2384137 =
  1237. {
  1238.     LogToConsole: function(ex, addInfo) {
  1239.         if (!EBPreferenceService_CT2384137.GetPref("conduit.debugMode")) return;
  1240.  
  1241.         if (ex && typeof ex.fileName != "undefined") {
  1242.             var strMsg = addInfo + " " + ex + "\nStack:\n " + ex.stack;
  1243.             this.ExtendedLogToConsole(strMsg, ex.fileName, null, ex.lineNumber, null, null, ex.name);
  1244.         }
  1245.         else
  1246.             this.ExtendedLogToConsole(ex, null, null, null, null, null, null);
  1247.     },
  1248.  
  1249.     ExtendedLogToConsole: function(aMessage, aSourceName, aSourceLine, aLineNumber, aColumnNumber, aFlags, aCategory) {
  1250.         var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
  1251.                                  .getService(Components.interfaces.nsIConsoleService);
  1252.         var scriptError = Components.classes["@mozilla.org/scripterror;1"]
  1253.                               .createInstance(Components.interfaces.nsIScriptError);
  1254.         scriptError.init(aMessage, aSourceName, aSourceLine, aLineNumber,
  1255.                    aColumnNumber, aFlags, aCategory);
  1256.  
  1257.         consoleService.logMessage(scriptError);
  1258.     }
  1259. };
  1260.  
  1261. function EBLog(ex, addInfo) {
  1262.     EBLogging_CT2384137.LogToConsole(ex, addInfo);
  1263. };
  1264.  
  1265. /*
  1266.  * A JavaScript implementation of the RSA Data Security, Inc. this.MD5 Message
  1267.  * Digest Algorithm, as defined in RFC 1321.
  1268.  * Copyright (C) Paul Johnston 1999 - 2000.
  1269.  * Updated by Greg Holt 2000 - 2001.
  1270.  * See http://pajhome.org.uk/site/legal.html for details.
  1271.  */
  1272.  
  1273. /*
  1274.  * Convert a 32-bit number to a hex string with ls-byte first
  1275.  */
  1276. var EB_MD5Hash_CT2384137 =
  1277. {
  1278.     hex_chr : "0123456789abcdef",
  1279.     
  1280.     rhex : function(num)
  1281.     {
  1282.       str = "";
  1283.       for(j = 0; j <= 3; j++)
  1284.         str += this.hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
  1285.                this.hex_chr.charAt((num >> (j * 8)) & 0x0F);
  1286.       return str;
  1287.     },
  1288.  
  1289.     /*
  1290.      * Convert a string to a sequence of 16-word blocks, stored as an array.
  1291.      * Append pthis.adding bits and the length, as described in the this.MD5 standard.
  1292.      */
  1293.     str2blks_MD5 : function(str)
  1294.     {
  1295.       nblk = ((str.length + 8) >> 6) + 1;
  1296.       blks = new Array(nblk * 16);
  1297.       for(i = 0; i < nblk * 16; i++) blks[i] = 0;
  1298.       for(i = 0; i < str.length; i++)
  1299.         blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
  1300.       blks[i >> 2] |= 0x80 << ((i % 4) * 8);
  1301.       blks[nblk * 16 - 2] = str.length * 8;
  1302.       return blks;
  1303.     },
  1304.  
  1305.     /*
  1306.      * this.add integers, wrapping at 2^32. This uses 16-bit operations internally 
  1307.      * to work around bugs in some JS interpreters.
  1308.      */
  1309.     add : function(x, y)
  1310.     {
  1311.       var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  1312.       var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  1313.       return (msw << 16) | (lsw & 0xFFFF);
  1314.     },
  1315.  
  1316.     /*
  1317.      * Bitwise rotate a 32-bit number to the left
  1318.      */
  1319.     rol : function(num, cnt)
  1320.     {
  1321.       return (num << cnt) | (num >>> (32 - cnt));
  1322.     },
  1323.  
  1324.     /*
  1325.      * These functions implement the basic operation for each round of the
  1326.      * algorithm.
  1327.      */
  1328.     cmn : function(q, a, b, x, s, t)
  1329.     {
  1330.       return this.add(this.rol(this.add(this.add(a, q), this.add(x, t)), s), b);
  1331.     },
  1332.     
  1333.     ff : function(a, b, c, d, x, s, t)
  1334.     {
  1335.       return this.cmn((b & c) | ((~b) & d), a, b, x, s, t);
  1336.     },
  1337.     
  1338.     gg : function(a, b, c, d, x, s, t)
  1339.     {
  1340.       return this.cmn((b & d) | (c & (~d)), a, b, x, s, t);
  1341.     },
  1342.     
  1343.     hh : function(a, b, c, d, x, s, t)
  1344.     {
  1345.       return this.cmn(b ^ c ^ d, a, b, x, s, t);
  1346.     },
  1347.     
  1348.     ii : function(a, b, c, d, x, s, t)
  1349.     {
  1350.       return this.cmn(c ^ (b | (~d)), a, b, x, s, t);
  1351.     },
  1352.  
  1353.     /*
  1354.      * Take a string and return the hex representation of its this.MD5.
  1355.      */
  1356.     MD5 : function(str)
  1357.     {
  1358.       x = this.str2blks_MD5(str);
  1359.       var a =  1732584193;
  1360.       var b = -271733879;
  1361.       var c = -1732584194;
  1362.       var d =  271733878;
  1363.      
  1364.       for(i = 0; i < x.length; i += 16)
  1365.       {
  1366.         var olda = a;
  1367.         var oldb = b;
  1368.         var oldc = c;
  1369.         var oldd = d;
  1370.  
  1371.         a = this.ff(a, b, c, d, x[i+ 0], 7 , -680876936);
  1372.         d = this.ff(d, a, b, c, x[i+ 1], 12, -389564586);
  1373.         c = this.ff(c, d, a, b, x[i+ 2], 17,  606105819);
  1374.         b = this.ff(b, c, d, a, x[i+ 3], 22, -1044525330);
  1375.         a = this.ff(a, b, c, d, x[i+ 4], 7 , -176418897);
  1376.         d = this.ff(d, a, b, c, x[i+ 5], 12,  1200080426);
  1377.         c = this.ff(c, d, a, b, x[i+ 6], 17, -1473231341);
  1378.         b = this.ff(b, c, d, a, x[i+ 7], 22, -45705983);
  1379.         a = this.ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
  1380.         d = this.ff(d, a, b, c, x[i+ 9], 12, -1958414417);
  1381.         c = this.ff(c, d, a, b, x[i+10], 17, -42063);
  1382.         b = this.ff(b, c, d, a, x[i+11], 22, -1990404162);
  1383.         a = this.ff(a, b, c, d, x[i+12], 7 ,  1804603682);
  1384.         d = this.ff(d, a, b, c, x[i+13], 12, -40341101);
  1385.         c = this.ff(c, d, a, b, x[i+14], 17, -1502002290);
  1386.         b = this.ff(b, c, d, a, x[i+15], 22,  1236535329);    
  1387.  
  1388.         a = this.gg(a, b, c, d, x[i+ 1], 5 , -165796510);
  1389.         d = this.gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
  1390.         c = this.gg(c, d, a, b, x[i+11], 14,  643717713);
  1391.         b = this.gg(b, c, d, a, x[i+ 0], 20, -373897302);
  1392.         a = this.gg(a, b, c, d, x[i+ 5], 5 , -701558691);
  1393.         d = this.gg(d, a, b, c, x[i+10], 9 ,  38016083);
  1394.         c = this.gg(c, d, a, b, x[i+15], 14, -660478335);
  1395.         b = this.gg(b, c, d, a, x[i+ 4], 20, -405537848);
  1396.         a = this.gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
  1397.         d = this.gg(d, a, b, c, x[i+14], 9 , -1019803690);
  1398.         c = this.gg(c, d, a, b, x[i+ 3], 14, -187363961);
  1399.         b = this.gg(b, c, d, a, x[i+ 8], 20,  1163531501);
  1400.         a = this.gg(a, b, c, d, x[i+13], 5 , -1444681467);
  1401.         d = this.gg(d, a, b, c, x[i+ 2], 9 , -51403784);
  1402.         c = this.gg(c, d, a, b, x[i+ 7], 14,  1735328473);
  1403.         b = this.gg(b, c, d, a, x[i+12], 20, -1926607734);
  1404.         
  1405.         a = this.hh(a, b, c, d, x[i+ 5], 4 , -378558);
  1406.         d = this.hh(d, a, b, c, x[i+ 8], 11, -2022574463);
  1407.         c = this.hh(c, d, a, b, x[i+11], 16,  1839030562);
  1408.         b = this.hh(b, c, d, a, x[i+14], 23, -35309556);
  1409.         a = this.hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
  1410.         d = this.hh(d, a, b, c, x[i+ 4], 11,  1272893353);
  1411.         c = this.hh(c, d, a, b, x[i+ 7], 16, -155497632);
  1412.         b = this.hh(b, c, d, a, x[i+10], 23, -1094730640);
  1413.         a = this.hh(a, b, c, d, x[i+13], 4 ,  681279174);
  1414.         d = this.hh(d, a, b, c, x[i+ 0], 11, -358537222);
  1415.         c = this.hh(c, d, a, b, x[i+ 3], 16, -722521979);
  1416.         b = this.hh(b, c, d, a, x[i+ 6], 23,  76029189);
  1417.         a = this.hh(a, b, c, d, x[i+ 9], 4 , -640364487);
  1418.         d = this.hh(d, a, b, c, x[i+12], 11, -421815835);
  1419.         c = this.hh(c, d, a, b, x[i+15], 16,  530742520);
  1420.         b = this.hh(b, c, d, a, x[i+ 2], 23, -995338651);
  1421.  
  1422.         a = this.ii(a, b, c, d, x[i+ 0], 6 , -198630844);
  1423.         d = this.ii(d, a, b, c, x[i+ 7], 10,  1126891415);
  1424.         c = this.ii(c, d, a, b, x[i+14], 15, -1416354905);
  1425.         b = this.ii(b, c, d, a, x[i+ 5], 21, -57434055);
  1426.         a = this.ii(a, b, c, d, x[i+12], 6 ,  1700485571);
  1427.         d = this.ii(d, a, b, c, x[i+ 3], 10, -1894986606);
  1428.         c = this.ii(c, d, a, b, x[i+10], 15, -1051523);
  1429.         b = this.ii(b, c, d, a, x[i+ 1], 21, -2054922799);
  1430.         a = this.ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
  1431.         d = this.ii(d, a, b, c, x[i+15], 10, -30611744);
  1432.         c = this.ii(c, d, a, b, x[i+ 6], 15, -1560198380);
  1433.         b = this.ii(b, c, d, a, x[i+13], 21,  1309151649);
  1434.         a = this.ii(a, b, c, d, x[i+ 4], 6 , -145523070);
  1435.         d = this.ii(d, a, b, c, x[i+11], 10, -1120210379);
  1436.         c = this.ii(c, d, a, b, x[i+ 2], 15,  718787259);
  1437.         b = this.ii(b, c, d, a, x[i+ 9], 21, -343485551);
  1438.  
  1439.         a = this.add(a, olda);
  1440.         b = this.add(b, oldb);
  1441.         c = this.add(c, oldc);
  1442.         d = this.add(d, oldd);
  1443.       }
  1444.       return this.rhex(a) + this.rhex(b) + this.rhex(c) + this.rhex(d);
  1445.     }
  1446. }
  1447.  
  1448. //class call url with response anonymous function
  1449. //the request as oppose to the xmlhttprequest object is set backstage(it's not like an actual navigation - its more low level)
  1450. var EBServerDataURL_CT2384137 = 
  1451. {
  1452.     ServerRequest : function(strURL,strPostData,strUserName,strPassword,ServerResponseFunction)
  1453.     {
  1454.         var objIOService    = Components.classes["@mozilla.org/network/io-service;1"].createInstance(Components.interfaces.nsIIOService);
  1455.         var objURI            = objIOService.newURI(strURL, null, null);
  1456.         
  1457.         if(strUserName != null && strPassword != null)
  1458.         {
  1459.             objURI.username        = strUserName;
  1460.             objURI.password        = strPassword;
  1461.         }
  1462.         
  1463.         var objChannel        = objIOService.newChannelFromURI(objURI);
  1464.         
  1465.         objChannel.QueryInterface(Components.interfaces.nsIHttpChannel).setRequestHeader('PRAGMA','NO-CACHE',false);
  1466.         objChannel.QueryInterface(Components.interfaces.nsIHttpChannel).setRequestHeader('CACHE-CONTROL','NO-CACHE',false);
  1467.  
  1468.         
  1469.         if(strPostData != null) 
  1470.         {
  1471.             var objUploadStream        = Components.classes["@mozilla.org/io/string-input-stream;1"].createInstance(Components.interfaces.nsIStringInputStream);
  1472.             objUploadStream.setData(strPostData, strPostData.length);
  1473.               
  1474.             var objUploadChannel    = objChannel.QueryInterface(Components.interfaces.nsIUploadChannel);
  1475.             objUploadChannel.setUploadStream(objUploadStream, "application/x-www-form-urlencoded", -1);
  1476.               
  1477.             objChannel.QueryInterface(Components.interfaces.nsIHttpChannel).requestMethod = "POST";
  1478.         }
  1479.         
  1480.         var objObserver = new this.Observer(ServerResponseFunction);
  1481.         objChannel.asyncOpen(objObserver, null);
  1482.     },
  1483.     
  1484.     Observer: function(ServerResponseFunction)
  1485.     {
  1486.         return ({
  1487.                     Data : "",
  1488.                     
  1489.                     onStartRequest: function(aRequest, aContext)
  1490.                     {
  1491.                         this.Data = "";
  1492.                     },
  1493.                     
  1494.                     onStopRequest: function(aRequest, aContext, aStatus)
  1495.                     {
  1496.                         if(ServerResponseFunction)
  1497.                         {
  1498.                             ServerResponseFunction(this.Data, aRequest);
  1499.                         }
  1500.                     },
  1501.                         
  1502.                     onDataAvailable: function(aRequest, aContext, aStream, aSourceOffset, aLength)
  1503.                     {
  1504.                         var objScriptableInputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
  1505.                         objScriptableInputStream.init(aStream);
  1506.                         this.Data += objScriptableInputStream.read(aLength);
  1507.                     }
  1508.                 });
  1509.     }
  1510. }
  1511.  
  1512. /*********************************************************/
  1513. /*     this TEAencrypt code taken from                     */
  1514. /* http://www.movable-type.co.uk/scripts/TEAblock.html   */
  1515. /*********************************************************/
  1516. var EBTEAEncryptionManager_CT2384137 = 
  1517. {
  1518.     TEAencrypt : function(plaintext, password)
  1519.     {
  1520.          if (plaintext.length == 0) return('');  // nothing to encrypt
  1521.         // 'escape' plaintext so chars outside ISO-8859-1 work in single-byte packing, but  
  1522.         // keep spaces as spaces (not '%20') so encrypted text doesn't grow too long, and 
  1523.         // convert result to longs
  1524.         var v = this.strToLongs(escape(plaintext).replace(/%20/g,' '));
  1525.         if (v.length == 1) v[1] = 0;  // algorithm doesn't work for n<2 so fudge by adding nulls
  1526.         var k = this.strToLongs(password.slice(0,16));  // simply convert first 16 chars of password as key
  1527.         var n = v.length;
  1528.  
  1529.         var z = v[n-1], y = v[0], delta = 0x9E3779B9;
  1530.         var mx,p, e, q = Math.floor(6 + 52/n), sum = 0;
  1531.         
  1532.         var kp3e;
  1533.         
  1534.         while (q-- > 0) {  // 6 + 52/n operations gives between 6 & 32 mixes on each word
  1535.             sum += delta;
  1536.             e = sum>>>2 & 3;
  1537.             for (p = 0; p < n-1; p++) {
  1538.                 y = v[p+1];
  1539.                 kp3e = k[p&3 ^ e];
  1540.                 if(!kp3e)
  1541.                 {
  1542.                     kp3e = 0;
  1543.                 }
  1544.                 mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (kp3e ^ z);
  1545.                 z = v[p] += mx;
  1546.             }
  1547.             y = v[0];
  1548.             kp3e = k[p&3 ^ e];
  1549.             if(!kp3e)
  1550.             {
  1551.                 kp3e = 0;
  1552.             }
  1553.             mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (kp3e ^ z);
  1554.             z = v[n-1] += mx;
  1555.         }
  1556.         // note use of >>> in place of >> due to lack of 'unsigned' type in JavaScript 
  1557.  
  1558.         var ciphertext = this.longsToStr(v);
  1559.  
  1560.         return this.escCtrlCh(ciphertext);    
  1561.     },
  1562.     
  1563.     TEAdecrypt : function(ciphertext, password)
  1564.     {
  1565.         if (ciphertext.length == 0) return('');
  1566.         var v = this.strToLongs(this.unescCtrlCh(ciphertext));
  1567.         var k = this.strToLongs(password.slice(0,16)); 
  1568.         var n = v.length;
  1569.  
  1570.         var z = v[n-1], y = v[0], delta = 0x9E3779B9;
  1571.         var mx,p, e, q = Math.floor(6 + 52/n), sum = q*delta;
  1572.         
  1573.         var kp3e;
  1574.         
  1575.         while (sum != 0) {
  1576.             e = sum>>>2 & 3;
  1577.             for (p = n-1; p > 0; p--) {
  1578.                 z = v[p-1];
  1579.                 kp3e = k[p&3 ^ e];
  1580.                 if(!kp3e)
  1581.                 {
  1582.                     kp3e = 0;
  1583.                 }
  1584.                 mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (kp3e ^ z);
  1585.                 y = v[p] -= mx;
  1586.             }
  1587.             z = v[n-1];
  1588.             kp3e = k[p&3 ^ e];
  1589.             if(!kp3e)
  1590.             {
  1591.                 kp3e = 0;
  1592.             }
  1593.             mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (kp3e ^ z);
  1594.             y = v[0] -= mx;
  1595.             sum -= delta;
  1596.         }
  1597.  
  1598.         var plaintext = this.longsToStr(v);
  1599.  
  1600.         // strip trailing null chars resulting from filling 4-char blocks:
  1601.         plaintext = plaintext.replace(/0+$/,'');
  1602.  
  1603.         return unescape(plaintext);    
  1604.     },
  1605.     
  1606.     strToLongs : function(s)
  1607.     {
  1608.         // convert string to array of longs, each containing 4 chars
  1609.         // note chars must be within ISO-8859-1 (with Unicode code-point < 256) to fit 4/long
  1610.         var l = new Array(Math.ceil(s.length/4));
  1611.         for (var i=0; i<l.length; i++) {
  1612.             // note little-endian encoding - endianness is irrelevant as long as 
  1613.             // it is the same in this.longsToStr() 
  1614.             l[i] = s.charCodeAt(i*4) + (s.charCodeAt(i*4+1)<<8) + 
  1615.                 (s.charCodeAt(i*4+2)<<16) + (s.charCodeAt(i*4+3)<<24);
  1616.         }
  1617.         return l;  // note running off the end of the string generates nulls since 
  1618.                 // bitwise operators treat NaN as 0
  1619.     },
  1620.     
  1621.     longsToStr : function(l)
  1622.     {
  1623.         // convert array of longs back to string
  1624.         var a = new Array(l.length);
  1625.         for (var i=0; i<l.length; i++) {
  1626.             a[i] = String.fromCharCode(l[i] & 0xFF, l[i]>>>8 & 0xFF, 
  1627.                                     l[i]>>>16 & 0xFF, l[i]>>>24 & 0xFF);
  1628.         }
  1629.         return a.join('');  // use Array.join() rather than repeated string appends for efficiency    
  1630.     },
  1631.     
  1632.     escCtrlCh : function(str)
  1633.     {
  1634.         // escape control chars which might cause problems with encrypted texts
  1635.         return str.replace(/[\0\t\n\v\f\r\xa0!]/g, function(c) { return '!' + c.charCodeAt(0) + '!'; });
  1636.     },
  1637.     
  1638.     unescCtrlCh : function(str)
  1639.     {
  1640.         // unescape potentially problematic nulls and control characters
  1641.         return str.replace(/!\d\d?\d?!/g, function(c) { return String.fromCharCode(c.slice(1,-1)); });
  1642.     }
  1643. }
  1644.  
  1645. var EBUrl_CT2384137 =
  1646. {
  1647.     HTTPS_PROTOCOL: "https://",
  1648.     HTTP_PROTOCOL: "http://",
  1649.  
  1650.     IsBookmarklet: function(strUrl) {
  1651.         var strBookmarkletPrefix = EBGlobalConsts_CT2384137.BookmarkletPrefix;
  1652.         return EBGlobalManager_CT2384137.BeginsWith(strUrl, strBookmarkletPrefix);
  1653.     },
  1654.  
  1655.     AddHTTPProtocol: function(strUrl) {
  1656.         var firstDot = strUrl.indexOf('.');
  1657.         var firstColum = strUrl.indexOf(':');
  1658.         if ((firstDot < firstColum && firstDot != -1) || firstColum == -1 && strUrl)
  1659.             strUrl = this.HTTP_PROTOCOL + strUrl;
  1660.  
  1661.         return strUrl;
  1662.     },
  1663.  
  1664.     GetProtocol: function(strUrl) {
  1665.         var arrMatches = strUrl.match(/(.*?):\/\//);
  1666.         if (arrMatches == null || arrMatches.length < 1) return "";
  1667.  
  1668.         return arrMatches[0];
  1669.     },
  1670.  
  1671.     LegalizeLinkUrl: function(strLinkUrl) {
  1672.         if (this.IsBookmarklet(strLinkUrl))
  1673.             strLinkUrl = this.LegalizeBoolmarkletURL(strLinkUrl);
  1674.         else {
  1675.             //convert every "\" to "\\"
  1676.             strLinkUrl = strLinkUrl.replace(/\\/g, "\\\\");
  1677.             //convert every "'" to "\'"
  1678.             strLinkUrl = strLinkUrl.replace(/'/g, "\'");
  1679.             strLinkUrl = EBUrl_CT2384137.AddHTTPProtocol(strLinkUrl);
  1680.         }
  1681.         return strLinkUrl;
  1682.     },
  1683.  
  1684.     LegalizeBoolmarkletURL: function(strURL) {
  1685.         var strBookmarkletPrefix = EBGlobalConsts_CT2384137.BookmarkletPrefix;
  1686.         if (EBGlobalManager_CT2384137.BeginsWith(strURL, strBookmarkletPrefix)) {
  1687.             strURL = EBXML_CT2384137.FromLegalXml(strURL);
  1688.         }
  1689.  
  1690.         return strURL;
  1691.     },
  1692.  
  1693.     //cehck validation of url if it starts with http:// or https:// or ftp://
  1694.     //and there is characters after it
  1695.     IsLegalURL: function(strURL) {
  1696.         var strRegex = /^(http:\/\/|https:\/\/|ftp:\/\/).+/i;
  1697.         return strRegex.test(strURL);
  1698.     },
  1699.  
  1700.     IsValidURL: function(strURL) {
  1701.         if (strURL.indexOf('.') == -1) {
  1702.             return false;
  1703.         }
  1704.  
  1705.         if (strURL.charAt(0) == '@') {
  1706.             return false;
  1707.         }
  1708.  
  1709.         return true;
  1710.     },
  1711.  
  1712.     GetBaseUrl: function(strURL) {
  1713.         //get the protocol in the first cell in the array - 
  1714.         //and the url (till the querystring) in the second cell of the array
  1715.         var arrMatches = strURL.match(/^(http:\/\/|https:\/\/|ftp:\/\/)?([^\/^\?^:]+)/i);
  1716.         var strProtocol = '';
  1717.         var strBaseUrl = '';
  1718.  
  1719.         if (arrMatches) {
  1720.             strProtocol = arrMatches[1];
  1721.             strBaseUrl = arrMatches[2];
  1722.  
  1723.             if (strProtocol) {
  1724.                 strBaseUrl = strProtocol + strBaseUrl;
  1725.             }
  1726.         }
  1727.  
  1728.         if (!strBaseUrl) {
  1729.             strBaseUrl = strURL;
  1730.         }
  1731.  
  1732.         return strBaseUrl;
  1733.     },
  1734.  
  1735.     GetBaseUrlWithoutProtocol: function(strURL) {
  1736.         //get the protocol in the first cell in the array - 
  1737.         //and the url (till the querystring) in the second cell of the array
  1738.         var arrMatches = strURL.match(/^(http:\/\/|https:\/\/|ftp:\/\/)?([^\/^\?^:]+)/i);
  1739.         var strProtocol = '';
  1740.         var strBaseUrl = '';
  1741.  
  1742.         if (arrMatches) {
  1743.             strProtocol = arrMatches[1];
  1744.             strBaseUrl = arrMatches[2];
  1745.         }
  1746.  
  1747.         if (!strBaseUrl)
  1748.             strBaseUrl = strURL;
  1749.  
  1750.         return strBaseUrl;
  1751.     },
  1752.  
  1753.     GetTopLevelDomainName: function(strUrl, bIsWithExtension) {
  1754.         var strExtension = '';
  1755.         var strBaseUrl = this.GetBaseUrl(strUrl);
  1756.         strBaseUrl = strBaseUrl.replace(this.HTTP_PROTOCOL, "");
  1757.         var iLast = strBaseUrl.lastIndexOf(".");
  1758.         strExtension = strBaseUrl.substring(iLast);
  1759.         strBaseUrl = strBaseUrl.substring(0, iLast);
  1760.         iLast = strBaseUrl.lastIndexOf(".");
  1761.  
  1762.         var strPotential = strBaseUrl.substring(iLast + 1);
  1763.  
  1764.         if (strPotential != "com" && strPotential != "co" && strPotential != "org" && strPotential != "gov" && strPotential != "net")
  1765.             strBaseUrl = strPotential;
  1766.         else {
  1767.             strExtension = strPotential + '.' + strExtension;
  1768.             iLast = strBaseUrl.lastIndexOf(".");
  1769.             strBaseUrl = strBaseUrl.substring(0, iLast);
  1770.             iLast = strBaseUrl.lastIndexOf(".");
  1771.             strBaseUrl = strBaseUrl.substring(iLast + 1);
  1772.             if (!strBaseUrl) {
  1773.                 strBaseUrl = strPotential;
  1774.             }
  1775.         }
  1776.  
  1777.         if (bIsWithExtension)
  1778.             return strBaseUrl + strExtension;
  1779.         else
  1780.             return strBaseUrl;
  1781.     },
  1782.  
  1783.     GetSubDomain: function(strUrl) {
  1784.         var strSubDomain = "";
  1785.         try {
  1786.             strUrl = strUrl.replace(/http:\/\//, '');
  1787.             var iEnd = strUrl.indexOf('.');
  1788.             strSubDomain = strUrl.substr(0, iEnd);
  1789.         }
  1790.         catch (e) { }
  1791.  
  1792.         return strSubDomain;
  1793.     },
  1794.  
  1795.     GetPageUrl: function() {
  1796.         var strUrl = "";
  1797.         if (typeof gBrowser != "undefined")
  1798.             strUrl = gBrowser.contentDocument.location.href;
  1799.  
  1800.         return strUrl;
  1801.     },
  1802.  
  1803.     IsSecuredUrl: function() {
  1804.         var strUrl = this.GetPageUrl();
  1805.         var strProtocol = this.GetProtocol(strUrl);
  1806.         return (strProtocol.toLowerCase() == this.HTTPS_PROTOCOL);
  1807.     },
  1808.  
  1809.     Randomize: function(strUrl) {
  1810.         return strUrl + ((strUrl.indexOf("?") != -1) ? "&" : "?") + Date.parse(Date());
  1811.     }
  1812. };
  1813.  
  1814. var EBUserID_CT2384137 =
  1815. {
  1816.     UN: "UN",
  1817.     UNIQUE_ID_LENGTH: 19,
  1818.  
  1819.     generate: function() {
  1820.         var strID = this.UN + Math.random().toString().substring(2);
  1821.         while (strID.length < this.UNIQUE_ID_LENGTH)
  1822.             strID += Math.random().toString().substring(2);
  1823.  
  1824.         return strID.substr(0, 19);
  1825.     }
  1826. }
  1827. var EBWeb_CT2384137 =
  1828. {
  1829.     LoadURL: function(strURL) {
  1830.         window._content.document.location = strURL;
  1831.         window.content.focus();
  1832.     },
  1833.  
  1834.     LoadURLInNewTab: function(strURL) {
  1835.         var oNewTab = getBrowser().addTab(strURL);
  1836.         getBrowser().selectedTab = oNewTab;
  1837.     },
  1838.  
  1839.     LoadURLInNewWindow: function(strURL, oUploadStream) {
  1840.         var oWindow = window.open(strURL, "EBNewWindow" + new Date().getTime(), 'toolbar=yes,directories=yes,location=yes,menubar=yes,resizable=yes,scrollbars=yes,status=yes');
  1841.         /* - doesn't work.
  1842.         if (oUploadStream)
  1843.         oWindow.webNavigation.loadURI(strURL,
  1844.         Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE,
  1845.         null,
  1846.         oUploadStream,
  1847.         null);
  1848.         */
  1849.         return oWindow;
  1850.     },
  1851.  
  1852.     //setup mime stream for post calling using the built-in loadURI function
  1853.     SetupMimeStream: function(strPostData) {
  1854.         var objInputStream = Components.classes["@mozilla.org/io/string-input-stream;1"].createInstance(Components.interfaces.nsIStringInputStream);
  1855.         objInputStream.setData(strPostData, strPostData.length);
  1856.  
  1857.         var objMimeStream = Components.classes["@mozilla.org/network/mime-input-stream;1"].createInstance(Components.interfaces.nsIMIMEInputStream);
  1858.         objMimeStream.addHeader("Content-Type", "application/x-www-form-urlencoded");
  1859.         objMimeStream.addHeader("Content-Length", strPostData.length);
  1860.         objMimeStream.setData(objInputStream);
  1861.  
  1862.         return objMimeStream;
  1863.     },
  1864.  
  1865.     NavigationWithCallBack: function(strURLNavigation, objCallBackFunction) {
  1866.         var objServerResponseFunction = function(strData, objRequest) {
  1867.             objCallBackFunction();
  1868.         };
  1869.  
  1870.         EBServerDataURL_CT2384137.ServerRequest(strURLNavigation,
  1871.                                                     null,
  1872.                                                     null,
  1873.                                                     null,
  1874.                                                     objServerResponseFunction);
  1875.     },
  1876.  
  1877.     HTTPServerRequest: function(strURL, strPostParams, bIsResponseXML, oCallBackFunction, bypassCache) {
  1878.         var oResponseData = null;
  1879.         var strNetworkError = EBGlobalConsts_CT2384137.NetworkError;
  1880.         var oRequest = new XMLHttpRequest();
  1881.  
  1882.         oRequest.mozBackgroundRequest = true;
  1883.         var strMethod = strPostParams ? 'POST' : 'GET';
  1884.  
  1885.         oRequest.open(strMethod, strURL, true);
  1886.  
  1887.         if (bypassCache)
  1888.             oRequest.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
  1889.  
  1890.         oRequest.onreadystatechange = function() {
  1891.             //create an object that represent if there was a network error
  1892.             var o = new Object();
  1893.             o.value = '';
  1894.             var bComplete = false;
  1895.             try {
  1896.                 if (oRequest.readyState == 4 && oRequest.status == 200) {
  1897.                     bComplete = true;
  1898.                     if (bIsResponseXML) {
  1899.                         oResponseData = oRequest.responseXML;
  1900.                     }
  1901.                     else {
  1902.                         oResponseData = oRequest.responseText;
  1903.                     }
  1904.                 }
  1905.             }
  1906.             catch (ex) {
  1907.                 oResponseData = null;
  1908.                 o.value = strNetworkError;
  1909.                 bComplete = true;
  1910.             }
  1911.  
  1912.             if (bComplete) {
  1913.                 if (oCallBackFunction) {
  1914.                     oCallBackFunction(oResponseData, o);
  1915.                 }
  1916.             }
  1917.         };
  1918.  
  1919.         oRequest.setRequestHeader('PRAGMA', 'NO-CACHE');
  1920.         oRequest.setRequestHeader('CACHE-CONTROL', 'NO-CACHE');
  1921.         oRequest.setRequestHeader('User-Agent', this.getUserAgent());
  1922.  
  1923.         if (strPostParams)
  1924.             oRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  1925.  
  1926.         oRequest.send(strPostParams);
  1927.  
  1928.         //return the request object
  1929.         return oRequest;
  1930.     },
  1931.  
  1932.     getUserAgent: function() {
  1933.         var strAgent = navigator.userAgent;
  1934.         try {
  1935.             var arrString = strAgent.split(";");
  1936.             arrString.push(arrString[arrString.length - 1]);
  1937.             arrString[arrString.length - 2] = " " + EBActionManager_CT2384137.GetCTID() + "_" + EBGlobalConsts_CT2384137.ToolbarVersion;
  1938.             return arrString.join(";");
  1939.         }
  1940.         catch (e) {
  1941.             return strAgent;
  1942.         }
  1943.     }
  1944. };
  1945. var EBWindows_CT2384137 =
  1946. {
  1947.     THEME_REG_PATH: "\Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager",
  1948.     THEME_REG_NAME: "ThemeActive",
  1949.  
  1950.     OpenApplication: function(strAppPath, strParam) {
  1951.         var bSuccess = false;
  1952.         try {
  1953.             var oFile = Components.classes["@mozilla.org/file/local;1"]
  1954.                                     .createInstance(Components.interfaces.nsILocalFile);
  1955.  
  1956.             oFile.initWithPath(strAppPath);
  1957.  
  1958.             if (oFile.exists()) {
  1959.                 // create an nsIProcess
  1960.                 var oProcess = Components.classes["@mozilla.org/process/util;1"]
  1961.                                     .createInstance(Components.interfaces.nsIProcess);
  1962.  
  1963.                 oProcess.init(oFile);
  1964.  
  1965.                 // Run the process.
  1966.                 // If first param is true, calling process will be blocked until
  1967.                 // called process terminates. 
  1968.                 // Second and third params are used to pass command-line arguments
  1969.                 // to the process.
  1970.                 var args = null;
  1971.                 var argsLen = 0;
  1972.                 if (strParam) {
  1973.                     args = [strParam];
  1974.                     argsLen = 1;
  1975.                 }
  1976.                 oProcess.run(false, args, argsLen);
  1977.                 bSuccess = true;
  1978.             }
  1979.         }
  1980.         catch (ex) {
  1981.             bSuccess = false;
  1982.         }
  1983.  
  1984.         return bSuccess;
  1985.  
  1986.     },
  1987.  
  1988.     GetWindowsMediaPath: function() {
  1989.         var strWindowsMediaPath = '';
  1990.         try {
  1991.             strWindowsMediaPath = EBRegistryManager_CT2384137.GetRegistryEntry(EBRegistryManager_CT2384137.HKEY_LOCAL_MACHINE,
  1992.                                                         'SOFTWARE\\Microsoft\\Windows\\CurrentVersion',
  1993.                                                         'MediaPath');
  1994.         }
  1995.         catch (ex) {
  1996.             strWindowsMediaPath = '';
  1997.         }
  1998.  
  1999.         return strWindowsMediaPath;
  2000.     },
  2001.  
  2002.     GetWindowsMyMusicPath: function() {
  2003.         var strWindowsMediaPath = '';
  2004.         try {
  2005.             strWindowsMediaPath = EBRegistryManager_CT2384137.GetRegistryEntry(EBRegistryManager_CT2384137.HKEY_CURRENT_USER,
  2006.                                                         'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders',
  2007.                                                         'My Music');
  2008.         }
  2009.         catch (ex) {
  2010.             strWindowsMediaPath = '';
  2011.         }
  2012.  
  2013.         return strWindowsMediaPath;
  2014.     },
  2015.  
  2016.     GetApplicationFullPath: function(strAppAlias) {
  2017.         var strAppPath = '';
  2018.         try {
  2019.             strAppPath = EBRegistryManager_CT2384137.GetRegistryEntry(EBRegistryManager_CT2384137.HKEY_CURRENT_USER,
  2020.                                                         'SOFTWARE\\Conduit\\AppPaths\\' + strAppAlias,
  2021.                                                         'AppPath');
  2022.         }
  2023.         catch (ex) {
  2024.             strAppPath = '';
  2025.         }
  2026.  
  2027.         if (strAppPath == "") {
  2028.             try {
  2029.                 strAppPath = EBRegistryManager_CT2384137.GetRegistryEntry(EBRegistryManager_CT2384137.HKEY_LOCAL_MACHINE,
  2030.                                                             'SOFTWARE\\Conduit\\AppPaths\\' + strAppAlias,
  2031.                                                             'AppPath');
  2032.             }
  2033.             catch (ex) {
  2034.                 strAppPath = '';
  2035.             }
  2036.         }
  2037.  
  2038.         strAppPath = strAppPath.replace(/\\/g, "\\\\");
  2039.         return strAppPath;
  2040.     },
  2041.  
  2042.     ConvertWindowsSpecialPath: function(strPath) {
  2043.         //get the system special path
  2044.         var strWindowsSystemRoot = EBGlobalManager_CT2384137.GetEnvironmentArg('SYSTEMROOT');
  2045.         var strWindowsProgramFiles = EBGlobalManager_CT2384137.GetEnvironmentArg('PROGRAMFILES');
  2046.  
  2047.         //clear first all "
  2048.         strPath = strPath.replace(/\"/g, '');
  2049.         //convert system root path
  2050.         strPath = strPath.replace(/%SystemRoot%/gi, strWindowsSystemRoot);
  2051.         //convert program files path
  2052.         strPath = strPath.replace(/%ProgramFiles%/gi, strWindowsProgramFiles);
  2053.  
  2054.         //add another system specail alias path here...
  2055.  
  2056.         return strPath;
  2057.     },
  2058.  
  2059.     GetWindowsEnvironmentArrayPath: function() {
  2060.         var strPaths = EBGlobalManager_CT2384137.GetEnvironmentArg('PATH');
  2061.         var arrPath = strPaths.split(';');
  2062.         return arrPath;
  2063.     },
  2064.  
  2065.     //returns is success
  2066.     WindowsShellDirectExecute: function(strAppExeName, strParam, bIsExecute) {
  2067.         return (bIsExecute) ? this.OpenApplication(strAppExeName, strParam) : EBGlobalManager_CT2384137.IsPathExists(strAppExeName);
  2068.     },
  2069.  
  2070.     //shell execute of windows - try to load/check application 
  2071.     //from the registry first and then from the system path array
  2072.     //bIsExecute - if true try to load application - else - check if this application exists
  2073.     WindowsShellExecute: function(strAppExeName, strParam, bIsExecute) {
  2074.         var bSuccess = false;
  2075.         if (EBGlobalManager_CT2384137.IsWindowsPlatform()) {
  2076.             var strAppFullPath = '';
  2077.             try {
  2078.                 //first try from registry
  2079.                 var strAppRegKeyPath = EBGlobalConsts_CT2384137.RegistryShellExecutePath + strAppExeName;
  2080.                 //load the default key name:
  2081.                 strAppFullPath = EBRegistryManager_CT2384137.GetRegistryEntry(EBRegistryManager_CT2384137.HKEY_LOCAL_MACHINE,
  2082.                                                             strAppRegKeyPath,
  2083.                                                             '');
  2084.  
  2085.                 strAppFullPath = this.ConvertWindowsSpecialPath(strAppFullPath);
  2086.                 if (bIsExecute) {
  2087.                     bSuccess = this.OpenApplication(strAppFullPath, strParam);
  2088.                 }
  2089.                 else {
  2090.                     bSuccess = EBGlobalManager_CT2384137.IsPathExists(strAppFullPath);
  2091.                 }
  2092.             }
  2093.             catch (ex) {
  2094.                 bSuccess = false;
  2095.             }
  2096.  
  2097.             try {
  2098.                 //second try from system path
  2099.                 if (!bSuccess) {
  2100.                     var arrPath = this.GetWindowsEnvironmentArrayPath();
  2101.                     for (var i = 0; i < arrPath.length; i++) {
  2102.                         strAppFullPath = arrPath[i] + EBDirIO_CT2384137.sep + strAppExeName;
  2103.                         if (bIsExecute) {
  2104.                             bSuccess = this.OpenApplication(strAppFullPath);
  2105.                         }
  2106.                         else {
  2107.                             bSuccess = EBGlobalManager_CT2384137.IsPathExists(strAppFullPath);
  2108.                         }
  2109.                         if (bSuccess) {
  2110.                             break;
  2111.                         }
  2112.                     }
  2113.                 }
  2114.             }
  2115.             catch (ex) {
  2116.                 bSuccess = false;
  2117.             }
  2118.         }
  2119.  
  2120.         return bSuccess;
  2121.     },
  2122.  
  2123.     IsVistaOS: function() {
  2124.         var strUserAgent = navigator.userAgent.toLowerCase();
  2125.         return (strUserAgent.indexOf('windows nt 6.0') != -1) ? true : false;
  2126.     },
  2127.  
  2128.     IsWindows7: function() {
  2129.         var strUserAgent = navigator.userAgent.toLowerCase();
  2130.         return (strUserAgent.indexOf('windows nt 6.1') != -1) ? true : false;
  2131.     },
  2132.  
  2133.     IsXP: function() {
  2134.         var strUserAgent = navigator.userAgent.toLowerCase();
  2135.         return (strUserAgent.indexOf('windows nt 5.1') != -1) ? true : false;
  2136.     },
  2137.  
  2138.     IsThemed: function() {
  2139.         var themeRegKey = EBRegistryManager_CT2384137.GetRegistryEntry(EBRegistryManager_CT2384137.HKEY_CURRENT_USER,
  2140.                                                                     this.THEME_REG_PATH,
  2141.                                                                     this.THEME_REG_NAME);
  2142.         return themeRegKey != 0;
  2143.     }
  2144. };
  2145.  
  2146. //registry manager:
  2147. var EBRegistryManager_CT2384137 = 
  2148. {
  2149.     HKEY_CLASSES_ROOT: 0,
  2150.     HKEY_CURRENT_CONFIG: 1,
  2151.     HKEY_CURRENT_USER: 2,
  2152.     HKEY_LOCAL_MACHINE: 3,
  2153.     HKEY_USERS: 4,
  2154.     
  2155.     GetRegistryEntry: function (regRoot, regPath, regName)
  2156.     {
  2157.         if("@mozilla.org/windows-registry-key;1" in Components.classes)
  2158.         {
  2159.             // This works in Firefox 1.5
  2160.             var nsIWindowsRegKey = Components.classes["@mozilla.org/windows-registry-key;1"].getService(Components.interfaces.nsIWindowsRegKey);
  2161.             var regRootKey = new Array(0x80000000, 0x80000005, 0x80000001, 0x80000002, 0x80000003);
  2162.             nsIWindowsRegKey.open(regRootKey[regRoot], regPath, Components.interfaces.nsIWindowsRegKey.ACCESS_READ);
  2163.         
  2164.             if(nsIWindowsRegKey.valueCount)
  2165.             {
  2166.                 return nsIWindowsRegKey.readStringValue(regName);
  2167.             }
  2168.         }
  2169.         else if("@mozilla.org/browser/shell-service;1" in Components.classes) 
  2170.         {
  2171.                 // This works in Firefox 1.0.x
  2172.                 var nsIWindowsShellService = Components.classes["@mozilla.org/browser/shell-service;1"].getService(Components.interfaces.nsIWindowsShellService);
  2173.             
  2174.                 if(nsIWindowsShellService.getRegistryEntry)
  2175.                 {
  2176.                     return nsIWindowsShellService.getRegistryEntry(regRoot, regPath, regName);
  2177.                 }
  2178.         }
  2179.         else if("@mozilla.org/winhooks;1" in Components.classes) 
  2180.         {
  2181.                 // This works in Mozilla 1.7.x
  2182.                 var nsIWindowsRegistry = Components.classes["@mozilla.org/winhooks;1"].getService(Components.interfaces.nsIWindowsRegistry);
  2183.                 if(nsIWindowsRegistry.getRegistryEntry)
  2184.                 {
  2185.                     return nsIWindowsRegistry.getRegistryEntry(regRoot, regPath, regName);
  2186.                 }
  2187.         }
  2188.         
  2189.         return null;
  2190.     }
  2191. }
  2192.  
  2193. var EBXML_CT2384137 =
  2194. {
  2195.     LegalizeEBXML: function(strXml) {
  2196.         if (!strXml)
  2197.             return;
  2198.  
  2199.         strXml = strXml.replace(/&/g, '&');
  2200.         strXml = strXml.replace(/'/g, '\'');
  2201.  
  2202.         strXml = strXml.replace(/&/g, "&");
  2203.         strXml = strXml.replace(/\'/g, "'");
  2204.  
  2205.         return strXml;
  2206.     },
  2207.  
  2208.     FromLegalXml: function(strXml) {
  2209.         strXml = strXml.replace(/&/g, '&');
  2210.         strXml = strXml.replace(/</g, '<');
  2211.         strXml = strXml.replace(/>/g, '>');
  2212.         strXml = strXml.replace(/"/g, '\"');
  2213.         strXml = strXml.replace(/'/g, '\'');
  2214.         strXml = strXml.replace(/'/g, '\'');
  2215.         strXml = strXml.replace(/'/g, '\'');
  2216.         strXml = strXml.replace(/!/g, '!');
  2217.         strXml = strXml.replace(/!/g, '!');
  2218.         strXml = strXml.replace(/Ü/g, '∩┐╜');
  2219.         strXml = strXml.replace(/Ü/g, '∩┐╜');
  2220.         strXml = strXml.replace(/Ö/g, '∩┐╜');
  2221.         strXml = strXml.replace(/Ö/g, '∩┐╜');
  2222.         return strXml;
  2223.     },
  2224.  
  2225.     ToLegalXML: function(strXML) {
  2226.         if (!strXML) return strXML;
  2227.         strXML = strXML.toString();
  2228.  
  2229.         strXML = strXML.replace(/&/g, '&');
  2230.         strXML = strXML.replace(/</g, '<');
  2231.         strXML = strXML.replace(/>/g, '>');
  2232.         strXML = strXML.replace(/\'/g, ''');
  2233.         strXML = strXML.replace(/\"/g, '"');
  2234.  
  2235.         return strXML;
  2236.     },
  2237.  
  2238.     FixParserError: function(strXml) {
  2239.         strXml = strXml.replace(/'/g, "'");
  2240.         strXml = strXml.replace(/&/g, "&");
  2241.         strXml = strXml.replace(/&/g, "&");
  2242.         strXml = strXml.replace(/'/g, "'");
  2243.         return strXml;
  2244.     },
  2245.  
  2246.     GetXmlDocument: function(strXml) {
  2247.         var parser = new DOMParser();
  2248.         var objXml = null;
  2249.         try {
  2250.             objXml = parser.parseFromString(strXml, "text/xml");
  2251.             if (objXml && objXml.documentElement.tagName == "parsererror") {
  2252.                 strXml = this.FixParserError(strXml);
  2253.                 objXml = parser.parseFromString(strXml, "text/xml");
  2254.             }
  2255.         }
  2256.         catch (e) {
  2257.         }
  2258.  
  2259.         return objXml;
  2260.     },
  2261.  
  2262.     IsLegal: function(xmlDoc) {
  2263.         if (!xmlDoc) return false;
  2264.         if (xmlDoc.documentElement.tagName == "parsererror") return false;
  2265.  
  2266.         return true;
  2267.     },
  2268.  
  2269.     GetXmlDocumentFromUrl: function(strUrl) {
  2270.         try {
  2271.             var req = new XMLHttpRequest();
  2272.             req.mozBackgroundRequest = true;
  2273.             req.open('GET', strUrl, false);
  2274.             req.send(null);
  2275.             if (req.status == 200 || req.status == 0) {
  2276.                 if (req.responseXML)
  2277.                     return req.responseXML;
  2278.                 else
  2279.                     return this.GetXmlDocument(req.responseText);
  2280.             }
  2281.             else
  2282.                 return null;
  2283.  
  2284.         } catch (e) {
  2285.             return null;
  2286.         }
  2287.     },
  2288.  
  2289.     GetStringXml: function(xmlNode) {
  2290.         var serializer = new XMLSerializer();
  2291.         return serializer.serializeToString(xmlNode);
  2292.     },
  2293.  
  2294.     CreateXmlTextNode: function(xmlDoc, strTagName, strValue) {
  2295.         var XML_NODE = xmlDoc.createElement(strTagName);
  2296.         var XML_VALUE = this.CreateXmlTextValue(xmlDoc, strValue);
  2297.         XML_NODE.appendChild(XML_VALUE);
  2298.         return XML_NODE;
  2299.     },
  2300.  
  2301.     CreateXmlTextValue: function(xmlDoc, strValue) {
  2302.         var XML_VALUE = xmlDoc.createTextNode(strValue);
  2303.         return XML_VALUE;
  2304.     },
  2305.  
  2306.     GetXmlNodeValue: function(xmlNode) {
  2307.  
  2308.         var iTextNodeType = Components.interfaces.nsIDOMNode.TEXT_NODE;
  2309.         var iCDataNodeType = Components.interfaces.nsIDOMNode.CDATA_SECTION_NODE;
  2310.         var strValue = "";
  2311.         if (xmlNode.childNodes.length != 0) {
  2312.             for (var i = 0; i < xmlNode.childNodes.length; i++) {
  2313.                 if (xmlNode.childNodes[i].nodeType == iTextNodeType || xmlNode.childNodes[i].nodeType == iCDataNodeType)
  2314.                     strValue += xmlNode.childNodes[i].nodeValue;
  2315.             }
  2316.         }
  2317.         return strValue;
  2318.     },
  2319.  
  2320.     GetBooleanXmlNodeValue: function(xmlNode, bDefaultValue) {
  2321.         var strValue = this.GetXmlNodeValue(xmlNode)
  2322.         if (!bDefaultValue) bDefaultValue = false;
  2323.         var bValue = bDefaultValue;
  2324.  
  2325.         if (strValue) {
  2326.             strValue = strValue.toLowerCase();
  2327.             if (strValue == "false")
  2328.                 bValue = false;
  2329.             else if (strValue == "true")
  2330.                 bValue = true;
  2331.         }
  2332.  
  2333.         return bValue;
  2334.     },
  2335.  
  2336.     SelectSingleNode: function(xmlDoc, strTagName) {
  2337.         var arrNodes = xmlDoc.getElementsByTagName(strTagName);
  2338.         if (arrNodes.length > 0)
  2339.             return arrNodes.item(0);
  2340.         else
  2341.             return null;
  2342.     },
  2343.  
  2344.     GetSingleNodeValue: function(xmlElement, strTagName) {
  2345.         var strValue = '';
  2346.         var xmlNode = this.SelectSingleNode(xmlElement, strTagName);
  2347.  
  2348.         if (xmlNode)
  2349.             strValue = this.GetXmlNodeValue(xmlNode);
  2350.  
  2351.         return strValue;
  2352.     },
  2353.  
  2354.     GetSingleNodeValueAsInteger: function(xmlElement, strTagName, defaultValue) {
  2355.         if (!defaultValue) defaultValue = 0;
  2356.         var strValue = this.GetSingleNodeValue(xmlElement, strTagName);
  2357.         if (!strValue)
  2358.             return defaultValue;
  2359.         else
  2360.             return parseInt(strValue);
  2361.     },
  2362.  
  2363.     GetSingleNodeValueAsBoolean: function(xmlElement, strTagName, bDefaultValue) {
  2364.         var strValue = '';
  2365.         var bValue = bDefaultValue;
  2366.         var xmlNode = this.SelectSingleNode(xmlElement, strTagName);
  2367.  
  2368.         if (xmlNode)
  2369.             strValue = this.GetXmlNodeValue(xmlNode);
  2370.  
  2371.         if (strValue) {
  2372.             strValue = strValue.toLowerCase();
  2373.             if (strValue == "false")
  2374.                 bValue = false;
  2375.             else if (strValue == "true")
  2376.                 bValue = true;
  2377.         }
  2378.  
  2379.         return bValue;
  2380.     },
  2381.  
  2382.     CreateXmlNodeString: function(strTagName, strValue) {
  2383.         return '<' + strTagName + '>' + this.ToLegalXML(strValue) + '</' + strTagName + '>';
  2384.     },
  2385.  
  2386.     CreateXmlNodeStartString: function(strTagName) {
  2387.         return '<' + strTagName + '>';
  2388.     },
  2389.  
  2390.     CreateXmlNodeEndString: function(strTagName) {
  2391.         return '</' + strTagName + '>';
  2392.     }
  2393. }
  2394.  
  2395. var EBAlertAbout_CT2384137 = {
  2396.     imgClose: null,
  2397.     divBtnOk: null,
  2398.     spcBtn: null,
  2399.  
  2400.     onload: function(event) {
  2401.         EBUILogic_Dialog_CT2384137.fadeIn("EBAlertAboutId");
  2402.         this._setLocalVars();
  2403.         this._initUI();
  2404.         this._fillUI();
  2405.     },
  2406.  
  2407.     onunload: function(event) {
  2408.  
  2409.     },
  2410.  
  2411.     onclickClose: function() {
  2412.         EBUILogic_Dialog_CT2384137.fadeOut("EBAlertAboutId");
  2413.     },
  2414.  
  2415.     _setLocalVars: function() {
  2416.         this.imgClose = document.getElementById("imgClose");
  2417.         this.divBtnOk = document.getElementById("divBtnOk");
  2418.     },
  2419.  
  2420.     _initUI: function() {
  2421.         EBUILogic_ImageButtons_CT2384137.setManager(this.imgClose);
  2422.         EBUILogic_ImageButtons_CT2384137.setManager(this.divBtnOk);
  2423.  
  2424.         if (EBGlobalManager_CT2384137.IsMacintoshPlatform())
  2425.             this.spcBtn.style.display = "none";
  2426.     },
  2427.  
  2428.     _fillUI: function() {
  2429.         //TODO:
  2430.     }
  2431. };
  2432. function EBAlertDialog_CT2384137() {
  2433.     this.getDOMNodeById = function(strId) {
  2434.         return document.getAnonymousElementByAttribute(this.xulWindow, "id", strId);
  2435.     };
  2436.  
  2437.     this.setDirection = function(strDirection) {
  2438.         this.popupManager.setPopupDirection(strDirection);
  2439.     };
  2440.  
  2441.     this._onload = function() {
  2442.         this.popupManager = new EBUILogic_Popup_CT2384137(this.xulWindow);
  2443.         this.popupManager.fadeIn(this.xulWindow);
  2444.         var that = this;
  2445.         this.popupManager.addMouseOverAndOutEvents(function(e) { that.onmouseover(e); },
  2446.                                                    function(e) { that.onmouseout(e); });
  2447.     };
  2448.  
  2449.     this.onclickClose = function() {
  2450.         //fade-out
  2451.         clearTimeout(this.lastMessageHandleTimer);
  2452.         this.popupManager.fadeOut();
  2453.         this.popupManager.removeMouseOverAndOutEvents();
  2454.     };
  2455.  
  2456.     this.registerObservers = function() {
  2457.         var that = this;
  2458.         this.iFrameProgressListener = new EBAlertMain_BrowserProgressListener(function(strUrl) { that.onclickLink(strUrl); },
  2459.                                                                                 function() { that.fillHtmlMessage(); },
  2460.                                                                                that.blankPage);
  2461.         this.xulElements.frameMsg.addProgressListener(this.iFrameProgressListener, Components.interfaces.nsIWebProgress.NOTIFY_ALL);
  2462.     };
  2463.  
  2464.     this.unregisterObservers = function() {
  2465.         this.xulElements.frameMsg.removeProgressListener(this.iFrameProgressListener);
  2466.     };
  2467.     
  2468.     this._onmouseover = function(event) {
  2469.         if (this.removedNoFocus) return;
  2470.  
  2471.         this.removedNoFocus = true;
  2472.         event.target.setAttribute("noautofocus", "false");
  2473.         event.target.focus();
  2474.     };
  2475.  
  2476.     this._onmouseout = function(event) {
  2477.         
  2478.     };  
  2479.  
  2480.     this.fillMsg = function() {
  2481.         this.xulElements.frameMsg.loadURI(this.blankPage);
  2482.     };
  2483.  
  2484.     this.onclickLink = function(strUrl) {
  2485.         var oMsg = (this.firstTimeMsg) ? this.firstTimeMsg : this.arrMessages[this.currIndex];
  2486.         if (!oMsg.isInternal)
  2487.             this.sendClickedUsage(oMsg);
  2488.  
  2489.         EBWeb_CT2384137.LoadURLInNewTab(strUrl);
  2490.         this.removeCurrentAlert(oMsg);
  2491.     };
  2492. };
  2493.  
  2494. EBAlertDialog_CT2384137.prototype = new EBBaseAlertDialog_CT2384137();
  2495. EBAlertDialog_CT2384137.constructor = EBAlertDialog_CT2384137;
  2496. function EBAlertDialogFF2_CT2384137() {
  2497.     var dialogId = "EBAlertMainId";
  2498.     var tempFileName = "aboutTabs.htm";
  2499.     var observer = null;
  2500.     var mainWindow = null;
  2501.     var alertHtml = "<html><head>{0}<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\"> </head><body style=\"background-color: rgb(234,238,247)\">{1}</body></html>";
  2502.  
  2503.     this.getDOMNodeById = function(strId) {
  2504.         return document.getElementById(strId);
  2505.     };
  2506.  
  2507.     this.setDirection = function(strDirection) {
  2508.         EBUILogic_Dialog_CT2384137.setWindowDirection(strDirection, dialogId);
  2509.     };
  2510.  
  2511.     this.getInfoFromManager = function() {
  2512.         mainWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  2513.         this.alertUI = mainWindow.oToolbar_CT2384137.alert.manager.getInternalAlert().uiManager;
  2514.         this.alertManager = mainWindow.oToolbar_CT2384137.alert.manager.getInternalAlert();
  2515.         this.arrMessages = new Array();
  2516.     };
  2517.  
  2518.     this._onload = function() {
  2519.         var that = this;
  2520.         observer = new EBAlertMainObserver_CT2384137(function(msg) { that.onNewMessage(msg); }, this.alertUI.observer.topic);
  2521.         observer.register();
  2522.  
  2523.         this.alertUI.releaseFF2WaitingMessages();
  2524.  
  2525.         EBUILogic_Dialog_CT2384137.fadeIn(dialogId);
  2526.  
  2527.         window.addEventListener("mouseover", function(e) { that.onmouseover(e); }, false);
  2528.         window.addEventListener("mouseout", function(e) { that.onmouseout(e); }, false);
  2529.         window.addEventListener("unload", function(e) { that.onunload(e); }, false);
  2530.  
  2531.         if (window.arguments && window.arguments.length > 0)
  2532.             this.onNewMessage(window.arguments[0]);
  2533.     };
  2534.  
  2535.     this.onclickClose = function() {
  2536.         clearTimeout(this.lastMessageHandleTimer);
  2537.         //fade-out
  2538.         EBUILogic_Dialog_CT2384137.fadeOut(dialogId);
  2539.  
  2540.         var that = this;
  2541.         window.removeEventListener("mouseover", function(e) { that.onmouseover(e); }, false);
  2542.         window.removeEventListener("mouseout", function(e) { that.onmouseout(e); }, false);
  2543.         window.removeEventListener("unload", function(e) { that.onunload(e); }, false);
  2544.         observer.unregister();
  2545.  
  2546.         //delete temporary file
  2547.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(tempFileName);
  2548.         if (oFile)
  2549.             EBFileIO_CT2384137.unlink(oFile);
  2550.     };
  2551.  
  2552.     this.fadeOutFrame = function(oCallback) {
  2553.         var iFrame = this.xulElements.frameMsg;
  2554.         var fadeOut = function(opacity) {
  2555.             if (opacity == 0) {
  2556.                 oCallback();
  2557.                 return;
  2558.             }
  2559.  
  2560.             iFrame.style.opacity = 1; //opacity * 0.01;
  2561.             opacity -= 4;
  2562.             setTimeout(function() { fadeOut(opacity); }, 2);
  2563.         }
  2564.         fadeOut(100);
  2565.     };
  2566.  
  2567.     this.fadeInFrame = function() {
  2568.         var iFrame = this.xulElements.frameMsg;
  2569.         var fadeIn = function(opacity) {
  2570.             if (opacity == 100)
  2571.                 return;
  2572.  
  2573.             iFrame.style.opacity = 1; //opacity * 0.01;
  2574.             opacity += 4;
  2575.             setTimeout(function() { fadeIn(opacity); }, 2);
  2576.         }
  2577.  
  2578.         fadeIn(0);
  2579.     };
  2580.  
  2581.     this.onclickLink = function(strUrl) {
  2582.         var oMsg = (this.firstTimeMsg) ? this.firstTimeMsg : this.arrMessages[this.currIndex];
  2583.         if (!oMsg.isInternal)
  2584.             this.sendClickedUsage(oMsg);
  2585.  
  2586.         mainWindow.EBWeb_CT2384137.LoadURLInNewTab(strUrl);
  2587.         this.removeCurrentAlert(oMsg);
  2588.     };
  2589.  
  2590.     this.fillHtmlMessage = function() {
  2591.         //do nothing
  2592.     };
  2593.  
  2594.     this.fillMsg = function() {
  2595.         var browser = this.xulElements.frameMsg;
  2596.         this.fadeInFrame();
  2597.         var iIndex = this.currIndex;
  2598.  
  2599.         var oMsg = null;
  2600.         if (this.firstTimeMsg) {
  2601.             oMsg = this.firstTimeMsg;
  2602.             this.sendViewedUsage(oMsg);
  2603.         }
  2604.         else {
  2605.             oMsg = this.arrMessages[iIndex];
  2606.  
  2607.             //add this message index to show messages ids hash
  2608.             if (!oMsg.isInternal && !this.hashShownIndexes.Contains(oMsg.guid)) {
  2609.                 this.hashShownIndexes.Add(oMsg.guid, oMsg.guid);
  2610.                 this.sendViewedUsage(oMsg);
  2611.             }
  2612.         }
  2613.  
  2614.         var strDirection = "";
  2615.  
  2616.         this.xulElements.imgLogo.src = oMsg.headerImage;
  2617.         this.xulElements.lblHeaderText.value = oMsg.headerText;
  2618.  
  2619.         /*
  2620.         if (EBGlobalManager_CT2384137.IsLinuxPlatform()) {
  2621.         this.xulElements.descMsgBody1.style.fontSize = "10px";
  2622.         this.xulElements.descMsgBody2.style.fontSize = "10px";
  2623.         }*/
  2624.  
  2625.         if (oMsg.headerCssStyle) {
  2626.             var strCssBold = (oMsg.headerCssStyle.isBold) ? "font-weight:Bold" : "";
  2627.             var style = stringFormat("color:{0};font-family:{1};{2}", oMsg.headerCssStyle.color, oMsg.headerCssStyle.fontFamily, strCssBold);
  2628.             this.xulElements.lblHeaderText.setAttribute("style", style);
  2629.         }
  2630.  
  2631.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(tempFileName);
  2632.         var strHtml = stringFormat(alertHtml, this.cssStyles, oMsg.msgHtml);
  2633.         strHtml = strHtml.replace(/href=/g, " target=\"_blank\" href=");
  2634.         EBFileIO_CT2384137.write(oFile, strHtml, null, "UTF-8");
  2635.         var strUrl = EBFileIO_CT2384137.path(oFile) + "?" + Date.parse(Date());
  2636.         browser.setAttribute("src", strUrl);
  2637.  
  2638.         //reverse dialog if message contains rtl chars.
  2639.         var strDirection = this.getWindowDirection(oMsg.msgHtml);
  2640.         this.setDirection(strDirection);
  2641.     };
  2642. };
  2643.  
  2644. EBAlertDialogFF2_CT2384137.prototype = new EBBaseAlertDialog_CT2384137();
  2645. EBAlertDialogFF2_CT2384137.constructor = EBAlertDialogFF2_CT2384137;
  2646. function EBAlertMain_BrowserProgressListener(onNavigationCallback, onBrowserReadyCallback) {
  2647.     var blankPage = "aboutTabs.htm";
  2648.     var isBlankPage = function(strUrl) {
  2649.         return (strUrl.indexOf(blankPage) != -1) ? true : false;
  2650.     };
  2651.  
  2652.     this.onStateChange = function(aProgress, aRequest, aFlag, aStatus) {
  2653.         var strUrl = aRequest.name;
  2654.         if (strUrl.indexOf("wyciwyg") == 0) return;
  2655.         
  2656.         if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT) {
  2657.             //clicked on link
  2658.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_START && !isBlankPage(strUrl)) {
  2659.                 aRequest.cancel(0);
  2660.                 onNavigationCallback(strUrl);
  2661.             }
  2662.  
  2663.             //browser is ready
  2664.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP && isBlankPage(strUrl)) {
  2665.                 setTimeout(function() { onBrowserReadyCallback(); }, 200);
  2666.             }
  2667.         }
  2668.     };
  2669. };
  2670.  
  2671. EBAlertMain_BrowserProgressListener.prototype = new EBBaseBrowserProgressListener_CT2384137();
  2672. EBAlertMain_BrowserProgressListener.constructor = EBAlertMain_BrowserProgressListener;
  2673. function EBAlertMainObserver_CT2384137(objCallback, strTopic) {
  2674.     this.Topic = strTopic;
  2675.  
  2676.     this.observe = function(aSubject, aTopic, aData) {
  2677.         try {
  2678.             objCallback(aSubject.wrappedJSObject.message);
  2679.         }
  2680.         catch (e) {
  2681.             EBLogging_CT2384137.LogToConsole(e, "AlertMainObserver");
  2682.         }
  2683.     }
  2684. }
  2685.  
  2686. EBAlertMainObserver_CT2384137.prototype = new EBBaseObserver_CT2384137();
  2687. var EBAlertManager_CT2384137 =
  2688. {
  2689.     MainToolbarID: 'FF_TB_CT2384137',
  2690.     ExternalToolbarID: 'FF_TB_EXT',
  2691.     _alertManager: null,
  2692.  
  2693.     UpdateAlertMultiple: function(arrAlertChannelIds) {
  2694.         this._alertManager.replaceChannelIds(this.MainToolbarID, arrAlertChannelIds);
  2695.     },
  2696.  
  2697.     UpdateAlertSingle: function(strAlertChannelId) {
  2698.         var arr = new Array();
  2699.         arr.push(strAlertChannelId);
  2700.         this.UpdateAlertMultiple(arr);
  2701.     },
  2702.  
  2703.     RunAlert: function() {
  2704.         if (!this._alertManager)
  2705.             this._alertManager = oToolbar_CT2384137.alert.manager;
  2706.  
  2707.         this._alertManager.register(this.MainToolbarID);
  2708.  
  2709.         //tray icon handler
  2710.         EBAlertTray_CT2384137.onload();
  2711.     },
  2712.  
  2713.     OpenSettingsDialog: function(win) {
  2714.         this._alertManager.openSettingsDialog(this.MainToolbarID, win);
  2715.     },
  2716.  
  2717.     Uninstall: function() {
  2718.         if (!this._alertManager)
  2719.             this.RunAlert();
  2720.         
  2721.         this._alertManager.unregister(this.MainToolbarID);
  2722.     },
  2723.  
  2724.     AddExternalAlert: function(alertId) {
  2725.         var errorCode = EBToolbarApiConsts_CT2384137.Errors.SUCCESS;
  2726.         this._alertManager.addExternalAlertChannel(alertId);
  2727.  
  2728.         return errorCode;
  2729.     },
  2730.  
  2731.     Refresh: function(isForceRefresh) {
  2732.         this._alertManager.refresh(isForceRefresh);
  2733.     },
  2734.  
  2735.     AlertEnabled: function(value) {
  2736.         //get
  2737.         if (typeof value == "undefined")
  2738.             return this._alertManager.alertEnabled();
  2739.         //set
  2740.         else
  2741.             this._alertManager.alertEnabled(value);
  2742.     },
  2743.  
  2744.     AddMyStuffAlert: function(alertId, providerName) {
  2745.         var errorCode = EBToolbarApiConsts_CT2384137.Errors.SUCCESS;
  2746.         this._alertManager.addMyStuffAlertChannel(alertId, providerName);
  2747.  
  2748.         return errorCode;
  2749.     }
  2750. };
  2751.  
  2752. var EBAlertPreview_CT2384137 = {
  2753.     imgClose: null,
  2754.     imgLogo: null,
  2755.     lblFeedTitle: null,
  2756.     divFeedItemsContainer: null,
  2757.  
  2758.     win: null,
  2759.  
  2760.     feed: null,
  2761.  
  2762.     onload: function(event) {
  2763.         EBUILogic_Dialog_CT2384137.fadeIn("EBAlertPreviewId");
  2764.         this._setLocalUIVars();
  2765.         this._setLocalVars();
  2766.  
  2767.         if (!this.feed.feedItems || this.feed.feedItems.length == 0) return;
  2768.  
  2769.         this._initUI();
  2770.         this._fillUI();
  2771.     },
  2772.  
  2773.     onunload: function(event) {
  2774.  
  2775.     },
  2776.  
  2777.     onclickClose: function() {
  2778.         EBUILogic_Dialog_CT2384137.fadeOut("EBAlertPreviewId");
  2779.     },
  2780.  
  2781.     _setLocalUIVars: function() {
  2782.         this.imgClose = document.getElementById("imgClose");
  2783.         this.imgLogo = document.getElementById("imgLogo");
  2784.         this.lblFeedTitle = document.getElementById("lblFeedTitle");
  2785.         this.divFeedItemsContainer = document.getElementById("divFeedItemsContainer");
  2786.     },
  2787.  
  2788.     _setLocalVars: function() {
  2789.         this.feed = window.arguments[0];
  2790.         this.win = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  2791.     },
  2792.  
  2793.     _initUI: function() {
  2794.         EBUILogic_ImageButtons_CT2384137.setManager(this.imgClose);
  2795.     },
  2796.  
  2797.     _fillUI: function() {
  2798.         this.imgLogo.src = this.feed.feedItems[0].headerImage;
  2799.         this.lblFeedTitle.value = this.feed.feedItems[0].feedTitle;
  2800.         var strLabelDir = (EBToolbarDesignManager_CT2384137.IsLTRLanguage(this.feed.feedItems[0].feedTitle)) ?
  2801.             "ltr" : "rtl";
  2802.         this.lblFeedTitle.style.direction = strLabelDir;
  2803.         this._fillFeedItems();
  2804.     },
  2805.  
  2806.     _fillFeedItems: function() {
  2807.         var feedItem;
  2808.         for (var i = 0; i < this.feed.feedItems.length; i++) {
  2809.             feedItem = this.feed.feedItems[i];
  2810.             this._appendFeedItem(feedItem);
  2811.         }
  2812.     },
  2813.  
  2814.     _appendFeedItem: function(feedItem) {
  2815.         var strDir = this._getDirection(feedItem);
  2816.         var xulVBox = EBXULFactory_CT2384137.CreateVBox("", "", "");
  2817.         xulVBox.setAttribute("style", "display:Block; width:275px; direction:" + strDir);
  2818.         xulVBox.setAttribute("class", "alertMessageBodyVBox");
  2819.  
  2820.         var title = document.createElement("label");
  2821.         title.setAttribute("value", feedItem.title);
  2822.         if (feedItem.link) {
  2823.             title.setAttribute("class", "alertMessageTitleLink");
  2824.             title.onclick = function(e) {
  2825.                 EBAlertPreview_CT2384137.win.EBWeb_CT2384137.LoadURLInNewWindow(feedItem.link);
  2826.             }
  2827.         }
  2828.         else
  2829.             title.setAttribute("class", "alertMessageTitleLabel");
  2830.  
  2831.         var htmlDesc = document.createElementNS("http://www.w3.org/1999/xhtml", "html:div");
  2832.         htmlDesc.setAttribute("class", "alertMessageBodyDesc");
  2833.  
  2834.         var xulDotHBox = document.createElementNS("http://www.w3.org/1999/xhtml", "html:div");
  2835.         xulDotHBox.setAttribute("class", "dotted");
  2836.         xulDotHBox.setAttribute("style", "width:250px; height:15px;");
  2837.  
  2838.         xulVBox.appendChild(title);
  2839.         xulVBox.appendChild(htmlDesc);
  2840.         xulVBox.appendChild(xulDotHBox);
  2841.         this.divFeedItemsContainer.appendChild(xulVBox);
  2842.  
  2843.         var strDesc = EBXML_CT2384137.LegalizeEBXML(feedItem.description);
  2844.         htmlDesc.innerHTML = strDesc.replace(/\n/g, "<html:br />");
  2845.     },
  2846.  
  2847.     _getDirection: function(feedItem) {
  2848.         var rtl = "rtl";
  2849.         var ltr = "ltr";
  2850.  
  2851.         if (!EBToolbarDesignManager_CT2384137.IsLTRLanguage(feedItem.title))
  2852.             return rtl;
  2853.  
  2854.         if (!EBToolbarDesignManager_CT2384137.IsLTRLanguage(feedItem.description))
  2855.             return rtl;
  2856.  
  2857.         return ltr;
  2858.     }
  2859. };
  2860. var EBAlertSettings_CT2384137 = {
  2861.     imgClose: null,
  2862.     divBtnOk: null,
  2863.     divBtnCancel: null,
  2864.  
  2865.     imgFeedback: null,
  2866.     imgFaq: null,
  2867.     imgPrivacy: null,
  2868.     imgAbout: null,
  2869.  
  2870.     chkEnabled: null,
  2871.     chkTray: null,
  2872.     spcButtns: null,
  2873.  
  2874.     divFeedsContainer: null,
  2875.  
  2876.     alertManager: null,
  2877.     alertUI: null,
  2878.     win: null,
  2879.  
  2880.     hashFeeds: null,
  2881.  
  2882.     onload: function(event) {
  2883.         EBUILogic_Dialog_CT2384137.fadeIn("EBAlertSettingsId");
  2884.         this._getCore();
  2885.         this._setLocalUIVars();
  2886.         this._setLocalVars();
  2887.         this._initUI();
  2888.         this._fillUI();
  2889.     },
  2890.  
  2891.     onunload: function(event) {
  2892.  
  2893.     },
  2894.  
  2895.     onclickClose: function() {
  2896.         EBUILogic_Dialog_CT2384137.fadeOut("EBAlertSettingsId");
  2897.     },
  2898.  
  2899.     onclickOk: function() {
  2900.         this._saveChanges();
  2901.         EBUILogic_Dialog_CT2384137.fadeOut("EBAlertSettingsId");
  2902.     },
  2903.  
  2904.     onclickFeedback: function() {
  2905.         var strLink = this.alertUI.getFeedBackLink();
  2906.         this.win.EBWeb_CT2384137.LoadURLInNewWindow(strLink);
  2907.     },
  2908.  
  2909.     onclickFaq: function() {
  2910.         var strLink = this.alertUI.getFaqLink();
  2911.         this.win.EBWeb_CT2384137.LoadURLInNewWindow(strLink);
  2912.     },
  2913.  
  2914.     onclickPrivacy: function() {
  2915.         var strLink = this.alertUI.getPrivacyLink();
  2916.         this.win.EBWeb_CT2384137.LoadURLInNewWindow(strLink);
  2917.     },
  2918.  
  2919.     onclickAbout: function() {
  2920.         this.alertUI.openAboutDialog();
  2921.     },
  2922.  
  2923.     _getCore: function() {
  2924.         this.win = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  2925.         this.alertUI = this.win.oToolbar_CT2384137.alert.manager.getInternalAlert().uiManager;
  2926.         this.alertManager = this.win.oToolbar_CT2384137.alert.manager.getInternalAlert();
  2927.     },
  2928.  
  2929.     _setLocalUIVars: function() {
  2930.         this.imgClose = document.getElementById("imgClose");
  2931.         this.divBtnOk = document.getElementById("divBtnOk");
  2932.         this.divBtnCancel = document.getElementById("divBtnCancel");
  2933.  
  2934.         this.imgFeedback = document.getElementById("imgFeedback");
  2935.         this.imgFaq = document.getElementById("imgFaq");
  2936.         this.imgPrivacy = document.getElementById("imgPrivacy");
  2937.         this.imgAbout = document.getElementById("imgAbout");
  2938.  
  2939.         this.chkEnabled = document.getElementById("chkEnabled");
  2940.         this.chkTray = document.getElementById("chkTray");
  2941.         this.spcButtns = document.getElementById("spcButtns");
  2942.  
  2943.         this.divFeedsContainer = document.getElementById("divFeeds");
  2944.     },
  2945.  
  2946.     _setLocalVars: function() {
  2947.         this.hashFeeds = this.alertManager.getFeedsHash();
  2948.     },
  2949.  
  2950.     _initUI: function() {
  2951.         EBUILogic_ImageButtons_CT2384137.setManager(this.imgClose);
  2952.         EBUILogic_ImageButtons_CT2384137.setManager(this.imgFeedback);
  2953.         EBUILogic_ImageButtons_CT2384137.setManager(this.imgFaq);
  2954.         EBUILogic_ImageButtons_CT2384137.setManager(this.imgPrivacy);
  2955.         EBUILogic_ImageButtons_CT2384137.setManager(this.imgAbout);
  2956.         EBUILogic_ImageButtons_CT2384137.setManager(this.divBtnOk);
  2957.         EBUILogic_ImageButtons_CT2384137.setManager(this.divBtnCancel);
  2958.  
  2959.         if (EBGlobalManager_CT2384137.IsMacintoshPlatform())
  2960.             this.spcButtns.style.display = "none";
  2961.  
  2962.         this.chkEnabled.checked = this.alertManager.alertEnabled();
  2963.         this.chkTray.checked = this.alertManager.showTray();
  2964.     },
  2965.  
  2966.     _fillUI: function() {
  2967.         this._fillFeeds();
  2968.     },
  2969.  
  2970.     _fillFeeds: function() {
  2971.         var feed = null;
  2972.         for (var i = 0; i < this.hashFeeds.Count(); i++) {
  2973.             feed = this.hashFeeds.GetByIndex(i);
  2974.             this._appendFeed(feed);
  2975.         }
  2976.     },
  2977.  
  2978.     _appendFeed: function(feed) {
  2979.         //do not show feeds without titles
  2980.         if (!feed.title) feed.title = "Alert";
  2981.  
  2982.         var xulHBox = EBXULFactory_CT2384137.CreateHBox("", "", "");
  2983.         var xulCheckbox = document.createElement("checkbox");
  2984.         xulCheckbox.setAttribute("id", feed.id);
  2985.         xulCheckbox.setAttribute("name", "feed");
  2986.         xulCheckbox.setAttribute("label", feed.title);
  2987.  
  2988.         //in linux, if applying this class, the checkbox becomes uncheckable.
  2989.         if (!EBGlobalManager_CT2384137.IsLinuxPlatform())
  2990.             xulCheckbox.setAttribute("class", "extendedCheckbox");
  2991.  
  2992.         var isChecked = (feed.isEnabled == 1) ? true : false;
  2993.         xulCheckbox.setAttribute("checked", isChecked);
  2994.         xulCheckbox.setAttribute("style", "width:260px");
  2995.  
  2996.         var xulLabel = EBXULFactory_CT2384137.CreateLabel("View", "");
  2997.         xulLabel.setAttribute("class", "viewLink");
  2998.         if (!feed.feedItems)
  2999.             xulLabel.setAttribute("disabled", "true");
  3000.         else
  3001.             xulLabel.onclick = function(e) {
  3002.                 EBAlertSettings_CT2384137.alertUI.openPreviewDialog(feed, window);
  3003.             };
  3004.  
  3005.         xulHBox.appendChild(xulCheckbox);
  3006.         xulHBox.appendChild(xulLabel);
  3007.         this.divFeedsContainer.appendChild(xulHBox);
  3008.     },
  3009.  
  3010.     _saveChanges: function() {
  3011.         //handle feed changes
  3012.         var arrCheckBox = document.getElementsByTagName("checkbox");
  3013.         var arrChangedFeeds = new Array();
  3014.         var feed = null;
  3015.         var checkBox = null;
  3016.         for (var i = 0; i < arrCheckBox.length; i++) {
  3017.             checkBox = arrCheckBox[i];
  3018.             if (checkBox.getAttribute("name") == "feed") {
  3019.                 feed = this.hashFeeds.GetByID(checkBox.id);
  3020.                 if (feed.isEnabled != checkBox.checked) {
  3021.                     feed.isEnabled = !feed.isEnabled;
  3022.                     arrChangedFeeds.push(feed);
  3023.                 }
  3024.             }
  3025.         }
  3026.  
  3027.         if (arrChangedFeeds.length != 0)
  3028.             this.alertManager.updateFeedsFromSettings(arrChangedFeeds);
  3029.  
  3030.         //handle other checkboxes changes
  3031.         if (this.chkEnabled.checked != this.alertManager.alertEnabled())
  3032.             this.alertManager.alertEnabled(this.chkEnabled.checked);
  3033.  
  3034.         if (this.chkTray.checked != this.alertManager.showTray())
  3035.             this.alertManager.showTray(this.chkTray.checked);
  3036.     }
  3037. };
  3038. var EBAlertTray_CT2384137 =
  3039. {
  3040.     iconId: "icon_CT2384137_Alert",
  3041.     ringIconUrl: "chrome://iobitcom/skin/alert/TrayIconAnimated.gif",
  3042.     alertIconUrl: "chrome://iobitcom/skin/alert/TrayIcon.ico",
  3043.  
  3044.     onload: function() {
  3045.         var oManager = oToolbar_CT2384137.alert.manager.getInternalAlert();
  3046.         if (oManager)
  3047.             oToolbar_CT2384137.alert.manager.getInternalAlert().onWindowLoad(document);
  3048.     },
  3049.  
  3050.     onclick: function(event) {
  3051.         //  if (event.button == 2)
  3052.         //      oToolbar_CT2384137.alert.manager.getInternalAlert().uiManager.openAlertDialog();
  3053.     },
  3054.  
  3055.     onRefresh: function() {
  3056.         oToolbar_CT2384137.alert.manager.refresh(false);
  3057.     },
  3058.  
  3059.     onSettings: function() {
  3060.         oToolbar_CT2384137.alert.manager.getInternalAlert().uiManager.openSettingsDialog(window);
  3061.     },
  3062.  
  3063.     onAbout: function() {
  3064.         oToolbar_CT2384137.alert.manager.getInternalAlert().uiManager.openAboutDialog();
  3065.     },
  3066.  
  3067.     onDisable: function() {
  3068.         var bIsEnabled = oToolbar_CT2384137.alert.manager.getInternalAlert().alertEnabled();
  3069.         oToolbar_CT2384137.alert.manager.getInternalAlert().alertEnabled(!bIsEnabled);
  3070.     },
  3071.  
  3072.     setIconRing: function(win) {
  3073.         var xulImage = win.document.getElementById(this.iconId);
  3074.         xulImage.src = this.ringIconUrl;
  3075.     },
  3076.  
  3077.     setIconNormal: function(win) {
  3078.         var xulImage = win.document.getElementById(this.iconId);
  3079.         xulImage.src = this.alertIconUrl;
  3080.     },
  3081.  
  3082.     onPopupShowing: function(xulPopup) {
  3083.         var bIsEnabled = oToolbar_CT2384137.alert.manager.getInternalAlert().alertEnabled();
  3084.         var strLabel = (bIsEnabled) ? "Disable Alerts" : "Enable Alerts";
  3085.         document.getElementById("alertMnuEnableDisable_CT2384137").label = strLabel;
  3086.         document.getElementById("alertMnuRefresh_CT2384137").disabled = !bIsEnabled;
  3087.     }
  3088. }
  3089. function EBBaseAlertDialog_CT2384137()
  3090. {
  3091.     this.blankPage = "chrome://iobitcom/content/aboutTabs.htm";
  3092.     var showMessageIntervalMS = 10000;
  3093.     this.autoScrollTimeoutFunc = null;
  3094.     this.lastMessageHandleTimer = null;
  3095.     this.autoScrollIsPaused = false;
  3096.  
  3097.     this.cssStyles = "<style type='text/css'>body{margin:2px;} .ebLink{color: #004498;} .ebLink:hover{text-decoration: underline;} .msgText{font-family:Arial; font-size: 11px;}</style>";
  3098.     this.cssStylesLinux = "<style type='text/css'>body{margin:2px;} .ebLink{color: #004498;} .ebLink:hover{text-decoration: underline;} .msgText{font-family:Arial; font-size: 10px;}</style>";
  3099.  
  3100.     this.xulElements = new Object();
  3101.     this.xulElements.imgClose = null;
  3102.     this.xulElements.imgSettings = null;
  3103.     this.xulElements.imgLogo = null;
  3104.     this.xulElements.lblHeaderText = null;
  3105.     this.xulElements.frameMsg = null;
  3106.     this.xulElements.boxPaging = null;
  3107.     
  3108.     //paging
  3109.     this.xulElements.imgNext = null;
  3110.     this.xulElements.imgPrev = null;
  3111.     this.xulElements.lblCurrentPage = null;
  3112.     this.xulElements.lblTotalPages = null;
  3113.     
  3114.     this.alertUI = null;
  3115.     this.alertManager = null;
  3116.     this.arrMessages = null;
  3117.     var deletedMsgsHash = null;
  3118.     this.currIndex = 0;
  3119.     this.hashShownIndexes = null;
  3120.     this.win = null;
  3121.     this.xulWindow = null;
  3122.     this.iFrameProgressListener = null;
  3123.  
  3124.     this.pagingSet = false;
  3125.     this.firstTimeMsg = null;
  3126.     this.observer = null;
  3127.     this.popupManager = null;
  3128.     this.removedNoFocus = null;
  3129.     this.isHover = false;
  3130.  
  3131.     this.fadeOutFrame = function(oCallback) {
  3132.         var iFrame = this.xulElements.frameMsg;
  3133.         var fadeOut = function(opacity) {
  3134.             if (opacity == 0) {
  3135.                 oCallback();
  3136.                 return;
  3137.             }
  3138.  
  3139.             iFrame.style.opacity = opacity * 0.01;
  3140.             opacity -= (EBGlobalManager_CT2384137.IsMacintoshPlatform()) ? 10 : 4;
  3141.             setTimeout(function() { fadeOut(opacity); }, 2);
  3142.         }
  3143.         fadeOut(100);
  3144.     };
  3145.  
  3146.     this.fadeInFrame = function() {
  3147.         var iFrame = this.xulElements.frameMsg;
  3148.         var fadeIn = function(opacity) {
  3149.             
  3150.             if (opacity == 100)
  3151.                 return;
  3152.  
  3153.             iFrame.style.opacity = opacity * 0.01;
  3154.             opacity += (EBGlobalManager_CT2384137.IsMacintoshPlatform()) ? 10 : 4;
  3155.             setTimeout(function() { fadeIn(opacity); }, 2);
  3156.         }
  3157.  
  3158.         fadeIn(0);
  3159.     };
  3160.  
  3161.     this.startAutoScroll = function(isFirstTime) {
  3162.         if (!this.autoScrollIsPaused) {
  3163.             if (this.autoScrollTimeoutFunc)
  3164.                 clearTimeout(this.autoScrollTimeoutFunc);
  3165.  
  3166.             var that = this;
  3167.  
  3168.             if (isFirstTime) {
  3169.                 this.autoScrollTimeoutFunc = setTimeout(function() { that.showNextMessage(); }, showMessageIntervalMS);
  3170.                 return;
  3171.             }
  3172.             if (this.arrMessages.length == 1) {
  3173.                 clearTimeout(this.lastMessageHandleTimer);
  3174.                 this.lastMessageHandleTimer = setTimeout(function() { that.handleLastMsg(); }, showMessageIntervalMS);
  3175.                 return;
  3176.             }
  3177.  
  3178.             this.autoScrollTimeoutFunc = setTimeout(function() { that.showNextMessage(); }, showMessageIntervalMS);
  3179.         }
  3180.     };
  3181.  
  3182.     this.pauseAutoScroll = function() {
  3183.         this.autoScrollIsPaused = true;
  3184.         clearTimeout(this.autoScrollTimeoutFunc);
  3185.         clearTimeout(this.lastMessageHandleTimer);
  3186.     };
  3187.  
  3188.     this.resumeAutoScroll = function() {
  3189.         this.autoScrollIsPaused = false;
  3190.         this.startAutoScroll(false);
  3191.     };
  3192.  
  3193.     this.handleLastMsg = function() {
  3194.         var msg;
  3195.         var tmpArray = new Array();
  3196.         for (var i = 0; i < this.arrMessages.length; i++) {
  3197.             msg = this.arrMessages[i];
  3198.             if (!msg) {
  3199.                 EBLog("message is undefined, array length is: " + this.arrMessages.length);
  3200.                 return;
  3201.             }
  3202.             if (!msg.isInternal) tmpArray.push(msg);
  3203.         }
  3204.  
  3205.         this.arrMessages = tmpArray.slice(0, tmpArray.length);
  3206.         tmpArray = null;
  3207.  
  3208.         if (!this.isHover && this.arrMessages.length == 0)
  3209.             this.onclickClose();
  3210.         else {
  3211.             this.currIndex = this.arrMessages.length - 1;
  3212.             if (!this.arrMessages.length == 0) {
  3213.                 this.fillMsg();
  3214.                 this.onPagingChanged();
  3215.             }
  3216.         }
  3217.     };
  3218.  
  3219.     this.showNextMessage = function() {
  3220.         if (this.currIndex >= this.arrMessages.length - 1) {
  3221.             this.handleLastMsg();
  3222.             return;
  3223.         }
  3224.  
  3225.         if (!this.autoScrollIsPaused) {
  3226.             this.onclickNext(false);
  3227.             this.startAutoScroll(false);
  3228.         }
  3229.     };
  3230.     
  3231.     //this function is invoked by observer on new message
  3232.     this.onNewMessage = function(msg) {
  3233.         this.arrMessages.push(msg);
  3234.         if (!msg || this.arrMessages.length < 0) return;
  3235.         this.setPaging(false);
  3236.         if (this.arrMessages.length > 1) {
  3237.             if (!this.pagingSet)
  3238.                 this.setPaging(!this.pagingSet);
  3239.             else {
  3240.                 this.xulElements.lblTotalPages.value = this.arrMessages.length;
  3241.                 this.onPagingChanged();
  3242.             }
  3243.         }
  3244.         else 
  3245.             this.startAutoScroll(true);
  3246.     };
  3247.  
  3248.     this.getInfoFromManager = function() {
  3249.         this.alertUI = oToolbar_CT2384137.alert.manager.getInternalAlert().uiManager;
  3250.         this.alertManager = oToolbar_CT2384137.alert.manager.getInternalAlert();
  3251.         this.arrMessages = new Array();
  3252.     };
  3253.  
  3254.     this.setLocalVars = function() {
  3255.         this.xulElements.imgClose = this.getDOMNodeById("imgClose");
  3256.         this.xulElements.imgSettings = this.getDOMNodeById("imgSettings");
  3257.  
  3258.         this.xulElements.imgLogo = this.getDOMNodeById("imgLogo");
  3259.         this.xulElements.lblHeaderText = this.getDOMNodeById("lblHeaderText");
  3260.         this.xulElements.frameMsg = this.getDOMNodeById("frameMsg");
  3261.  
  3262.         this.xulElements.boxPaging = this.getDOMNodeById("boxPaging");
  3263.         this.hashShownIndexes = new EBArrayHashObject_CT2384137();
  3264.     };
  3265.  
  3266.     this.initUI = function() {
  3267.         EBUILogic_ImageButtons_CT2384137.setManager(this.xulElements.imgClose);
  3268.         EBUILogic_ImageButtons_CT2384137.setManager(this.xulElements.imgSettings);
  3269.  
  3270.         var that = this;
  3271.         this.xulElements.imgClose.onclick = function(event) { that.onclickClose(window); };
  3272.         this.xulElements.imgSettings.onclick = function(event) { that.onclickSettings(window); };
  3273.  
  3274.         //return focus
  3275.         var alertUI = this.alertUI;
  3276.         setTimeout(function() { alertUI.returnFocus(); }, 10);
  3277.     };
  3278.  
  3279.     this.setPaging = function(withStartAutoScroll) {
  3280.         this.currIndex = 0;
  3281.         this.xulElements.imgNext = this.getDOMNodeById("imgNext");
  3282.         this.xulElements.imgPrev = this.getDOMNodeById("imgPrev");
  3283.  
  3284.         EBUILogic_ImageButtons_CT2384137.setManager(this.xulElements.imgNext);
  3285.         EBUILogic_ImageButtons_CT2384137.setManager(this.xulElements.imgPrev);
  3286.  
  3287.         var that = this;
  3288.         this.xulElements.imgPrev.onclick = function(event) { if (!event.target.manager.isDisabled) that.onclickPrev(); };
  3289.         this.xulElements.imgNext.onclick = function(event) { if (!event.target.manager.isDisabled) that.onclickNext(true); };
  3290.  
  3291.         this.xulElements.lblCurrentPage = this.getDOMNodeById("lblCurrentPage");
  3292.         this.xulElements.lblTotalPages = this.getDOMNodeById("lblTotalPages");
  3293.  
  3294.         this.xulElements.lblTotalPages.value = this.arrMessages.length;
  3295.  
  3296.         this.onPagingChanged();
  3297.  
  3298.         this.pagingSet = true;
  3299.  
  3300.         if (withStartAutoScroll)
  3301.             this.startAutoScroll(true);
  3302.     };
  3303.  
  3304.     this.fillUI = function() {
  3305.         if (this.arrMessages.length > 1 && !this.firstTimeMsg)
  3306.             this.setPaging(true);
  3307.         else
  3308.             this.xulElements.boxPaging.style.display = "none";
  3309.  
  3310.         this.fillMsg();
  3311.     };
  3312.  
  3313.     this.onPagingChanged = function() {
  3314.         if (this.arrMessages.length >= 2)
  3315.             this.xulElements.boxPaging.style.display = "";
  3316.         else
  3317.             this.xulElements.boxPaging.style.display = "none";
  3318.  
  3319.         if (this.currIndex == 0)
  3320.             this.xulElements.imgPrev.manager.disable();
  3321.         else
  3322.             this.xulElements.imgPrev.manager.enable();
  3323.  
  3324.         if (this.currIndex == this.arrMessages.length - 1)
  3325.             this.xulElements.imgNext.manager.disable();
  3326.         else
  3327.             this.xulElements.imgNext.manager.enable();
  3328.  
  3329.         this.xulElements.lblCurrentPage.value = this.currIndex + 1;
  3330.         this.xulElements.lblTotalPages.value = this.arrMessages.length;
  3331.     };
  3332.  
  3333.     this.getWindowDirection = function(strText) {
  3334.         return EBToolbarDesignManager_CT2384137.IsLTRLanguage(strText) ? "ltr" : "rtl";
  3335.     };
  3336.  
  3337.     this.fillHtmlMessage = function() {
  3338.         this.fadeInFrame();
  3339.         var iIndex = this.currIndex;
  3340.  
  3341.         var oMsg = null;
  3342.         if (this.firstTimeMsg) {
  3343.             oMsg = this.firstTimeMsg;
  3344.             this.sendViewedUsage(oMsg);
  3345.         }
  3346.         else {
  3347.             oMsg = this.arrMessages[iIndex];
  3348.  
  3349.             //add this message index to show messages ids hash
  3350.             if (!oMsg.isInternal && !this.hashShownIndexes.Contains(oMsg.guid)) {
  3351.                 this.hashShownIndexes.Add(oMsg.guid, oMsg.guid);
  3352.                 this.sendViewedUsage(oMsg);
  3353.             }
  3354.         }
  3355.  
  3356.         var strDirection = "";
  3357.  
  3358.         this.xulElements.imgLogo.src = oMsg.headerImage;
  3359.         this.xulElements.lblHeaderText.value = oMsg.headerText;
  3360.  
  3361.         /*
  3362.         if (EBGlobalManager_CT2384137.IsLinuxPlatform()) {
  3363.         this.xulElements.descMsgBody1.style.fontSize = "10px";
  3364.         this.xulElements.descMsgBody2.style.fontSize = "10px";
  3365.         }*/
  3366.  
  3367.         if (oMsg.headerCssStyle) {
  3368.             var strCssBold = (oMsg.headerCssStyle.isBold) ? "font-weight:Bold" : "";
  3369.             var style = stringFormat("color:{0};font-family:{1};{2}", oMsg.headerCssStyle.color, oMsg.headerCssStyle.fontFamily, strCssBold);
  3370.             this.xulElements.lblHeaderText.setAttribute("style", style);
  3371.         }
  3372.  
  3373.         var doc = this.xulElements.frameMsg.contentDocument;
  3374.         var cssStyles = (EBGlobalManager_CT2384137.IsLinuxPlatform()) ? this.cssStylesLinux : this.cssStyles;
  3375.         doc.write(oMsg.msgHtml);
  3376.         doc.getElementsByTagName("head")[0].innerHTML = cssStyles;
  3377.  
  3378.         //reverse dialog if message contains rtl chars.
  3379.         var strDirection = this.getWindowDirection(oMsg.msgHtml);
  3380.         this.setDirection(strDirection);
  3381.     };
  3382.  
  3383.     this.sendClickedUsage = function(oMsg) {
  3384.         if (oMsg.sendUsage)
  3385.             this.alertManager.usageManager.msgClicked(oMsg.guid, oMsg.feedId);
  3386.     };
  3387.  
  3388.     this.sendViewedUsage = function(oMsg) {
  3389.         if (oMsg.sendUsage)
  3390.             this.alertManager.usageManager.msgViewed(oMsg.guid, oMsg.feedId);
  3391.     };
  3392.  
  3393.     this.sendFwdUsage = function(oMsg) {
  3394.         if (oMsg.sendUsage)
  3395.             this.alertManager.usageManager.msgForwarded(oMsg.guid, oMsg.feedId);
  3396.     };
  3397.  
  3398.     this.sendBckUsage = function(oMsg) {
  3399.         if (oMsg.sendUsage)
  3400.             this.alertManager.usageManager.msgBackwarded(oMsg.guid, oMsg.feedId);
  3401.     };
  3402.     
  3403.     // **** functions to implement in child class ****
  3404.     this.getDOMNodeById = function(strId) { };
  3405.     this._onload = function() { };
  3406.     this.setDirection = function(strDir) { };
  3407.     this.onclickClose = function() { };
  3408.     this._onmouseover = function(event) { };
  3409.     this._onmouseout = function(event) { };
  3410.     this.fillMsg = function() { };
  3411.     this.onclickLink = function(strUrl) { };
  3412.     this.registerObservers = function() { };
  3413.     this.unregisterObservers = function() { };
  3414.     //************************************************
  3415.  
  3416.     this.onload = function(xulAlertDialog) {
  3417.         this.xulWindow = xulAlertDialog;
  3418.         this.getInfoFromManager();
  3419.         this.setLocalVars();
  3420.         this.registerObservers();
  3421.         this._onload();
  3422.         this.initUI();
  3423.         this.fillUI();
  3424.  
  3425.         this.alertUI.setAnimatedIcon();
  3426.     };
  3427.  
  3428.     this.onunload = function(event) {
  3429.         this.alertManager.removeShownMessages(this.hashShownIndexes.IndexerArray, this.alertManager.isFirstMsgShown());
  3430.         this.alertUI.setNormalIcon();
  3431.         this.unregisterObservers();
  3432.         this.pagingSet = false;
  3433.     };
  3434.  
  3435.     this.onmouseover = function(event) {
  3436.         this.isHover = true;
  3437.         this.pauseAutoScroll();
  3438.         this._onmouseover(event);
  3439.     };
  3440.  
  3441.     this.onmouseout = function(event) {
  3442.         this.isHover = false;
  3443.         this.resumeAutoScroll();
  3444.         this._onmouseout(event);
  3445.     };  
  3446.     
  3447.     this.onclickSettings = function(win) {
  3448.         this.alertUI.openSettingsDialog(win);
  3449.     };
  3450.     
  3451.     this.onclickPrev = function() {
  3452.         //to avoid going to negative index on multiple clicking
  3453.         if (this.currIndex == 0) {
  3454.             this.xulElements.imgPrev.manager.disable();
  3455.             return;
  3456.         }
  3457.  
  3458.         this.currIndex--;
  3459.         this.sendBckUsage(this.arrMessages[this.currIndex]);
  3460.         var that = this;
  3461.         var callback = function() {
  3462.             that.fillMsg();
  3463.             that.onPagingChanged(false);
  3464.         };
  3465.  
  3466.         this.fadeOutFrame(callback);
  3467.     };
  3468.  
  3469.     this.onclickNext = function(isUserClick) {
  3470.         //to avoid going out of boundes index on multiple clicking
  3471.         if (this.currIndex == this.arrMessages.length - 1) {
  3472.             this.xulElements.imgNext.manager.disable();
  3473.             return;
  3474.         }
  3475.  
  3476.         this.currIndex++;
  3477.         if (isUserClick)
  3478.             this.sendFwdUsage(this.arrMessages[this.currIndex]);
  3479.         var that = this;
  3480.         var callback = function() {
  3481.             that.fillMsg();
  3482.             that.onPagingChanged(false);
  3483.         };
  3484.  
  3485.         this.fadeOutFrame(callback);
  3486.     };
  3487.  
  3488.     this.removeCurrentAlert = function(oMsg) {
  3489.         this.arrMessages.splice(this.currIndex, 1);
  3490.         if (this.currIndex + 1 > this.arrMessages.length)
  3491.             this.currIndex--;
  3492.  
  3493.         if (this.arrMessages.length != 0) {
  3494.             this.fillMsg();
  3495.             this.onPagingChanged();
  3496.         }
  3497.         else {
  3498.             this.onclickClose();
  3499.         }
  3500.     };
  3501. };
  3502. function EBBrowserCompApi_CT2384137(width, height, xulBrowser, objManager, compId, elementId, compType, isAllowUntrustedFunctions) {
  3503.     this.width = width;
  3504.     this.height = height;
  3505.     this.lastError = "";
  3506.  
  3507.     this.getWidth = function() {
  3508.         return this.width;
  3509.     };
  3510.  
  3511.     this.getHeight = function() {
  3512.         return this.height;
  3513.     };
  3514.  
  3515.     this.storeKey = function(strKey, strValue) {
  3516.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(_getUrl(), strKey);
  3517.         strValue = (strValue) ? EBEncryption_CT2384137.encodeHex(strValue) : "";
  3518.         EBToolbarPreferenceManager_CT2384137.SetPref(strFullPreferencePath, strValue);
  3519.     };
  3520.  
  3521.     this.retrieveKey = function(strKey) {
  3522.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(_getUrl(), strKey);
  3523.         var strValue = EBToolbarPreferenceManager_CT2384137.GetPref(strFullPreferencePath);
  3524.         if (strValue) strValue = EBEncryption_CT2384137.decodeHex(strValue);
  3525.         return strValue;
  3526.     };
  3527.  
  3528.     this.deleteKey = function(strKey) {
  3529.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(_getUrl(), strKey);
  3530.         EBToolbarPreferenceManager_CT2384137.SetPref(strFullPreferencePath, null);
  3531.     };
  3532.  
  3533.     this.storeGlobalKey = function(strKey, strValue) {
  3534.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(null, strKey);
  3535.         var originalValue = strValue;
  3536.         strValue = (strValue) ? EBEncryption_CT2384137.encodeHex(strValue) : "";
  3537.         EBToolbarPreferenceManager_CT2384137.SetPref(strFullPreferencePath, strValue);
  3538.  
  3539.         //broadcast change
  3540.         var aSubject = new Object();
  3541.         aSubject.wrappedJSObject = aSubject;
  3542.         aSubject.key = strKey;
  3543.         aSubject.value = originalValue;
  3544.         EBObserversManager_CT2384137.NotifyCustomObserver(aSubject,
  3545.             EBObserversManager_CT2384137.ToolbarEventsTopic,
  3546.             EBObserversManager_CT2384137.ToolbarEventsData.EBGlobalKeyChanged);
  3547.     };
  3548.  
  3549.     this.retrieveGlobalKey = function(strKey) {
  3550.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(null, strKey);
  3551.         var strValue = EBToolbarPreferenceManager_CT2384137.GetPref(strFullPreferencePath);
  3552.         if (strValue) strValue = EBEncryption_CT2384137.decodeHex(strValue);
  3553.         return strValue;
  3554.     };
  3555.  
  3556.     this.deleteGlobalKey = function(strKey) {
  3557.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(null, strKey);
  3558.         EBToolbarPreferenceManager_CT2384137.SetPref(strFullPreferencePath, null);
  3559.     };
  3560.     
  3561.     this.selfNavigate = function(strUrl, newWidth) {
  3562.         if (newWidth) this.changeWidth(newWidth);
  3563.         xulBrowser.loadURI(strUrl + "#_self");
  3564.     };
  3565.  
  3566.     this.changeWidth = function(newWidth) {
  3567.         xulBrowser.width = newWidth;
  3568.         this.width = newWidth;
  3569.         _reloadBrowser();
  3570.     };
  3571.  
  3572.     this.changeSize = function(newWidth, newHeight) {
  3573.         this.changeWidth(newWidth);
  3574.     };
  3575.  
  3576.     this.refreshToolbar = function() {
  3577.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3578.         oWindow.EBSpecialCommands_CT2384137.REFRESH_TOOLBAR_VIEW(false);
  3579.     };
  3580.  
  3581.     this.openGadget = function(strUrl, width, height, bIsResizable) {
  3582.         if (typeof bIsResizable == "undefined") bIsResizable = true;
  3583.  
  3584.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3585.  
  3586.         var popHtmlData = new oToolbar_CT2384137.toolbarDataParsing.dataObjects.PopHtml();
  3587.         popHtmlData.popHtmlUrl = strUrl;
  3588.         popHtmlData.parentElement = xulBrowser;
  3589.         popHtmlData.openPositionType = popHtmlData.openPositionTypes.alignment;
  3590.         popHtmlData.openPositionData.vertical = popHtmlData.openPositionTypes.verticalAlignmentBottom;
  3591.         popHtmlData.width = width;
  3592.         popHtmlData.height = height;
  3593.         popHtmlData.resizable = bIsResizable;
  3594.         popHtmlData.isUser = isAllowUntrustedFunctions;
  3595.         popHtmlData.componentId = compId;
  3596.         popHtmlData.elementId = elementId;
  3597.         popHtmlData.compType = compType;
  3598.         popHtmlData.source = oWindow.EBUsageGadget_CT2384137.SourceBC;
  3599.         popHtmlData.gadgetType = EBGadgetManager_CT2384137.GADGET_TYPE_REGULAR;
  3600.         
  3601.         oWindow.EBGadgetManager_CT2384137.OpenGadget(popHtmlData);
  3602.     };
  3603.  
  3604.     this.openGadget2 = function(strUrl, width, height, features) {
  3605.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3606.  
  3607.         var popHtmlData = new oToolbar_CT2384137.toolbarDataParsing.dataObjects.PopHtml();
  3608.         popHtmlData.popHtmlUrl = strUrl;
  3609.         popHtmlData.parentElement = xulBrowser;
  3610.         popHtmlData.width = width;
  3611.         popHtmlData.height = height;
  3612.         popHtmlData.isUser = isAllowUntrustedFunctions;
  3613.         popHtmlData.componentId = compId;
  3614.         popHtmlData.elementId = elementId;
  3615.         popHtmlData.compType = compType;
  3616.         popHtmlData.source = oWindow.EBUsageGadget_CT2384137.SourceBC;
  3617.         popHtmlData.gadgetType = EBGadgetManager_CT2384137.GADGET_TYPE_REGULAR;
  3618.         popHtmlData.initFeatures(features);
  3619.         oWindow.EBGadgetManager_CT2384137.OpenGadget(popHtmlData);
  3620.     };
  3621.  
  3622.     this.navigateInMainFrame = function(strUrl) {
  3623.         if (objManager && objManager._isUserClick()) {
  3624.             var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3625.             oWindow.EBLinkManager_CT2384137.LoadLinkURL(null, strUrl, "SELF", null);
  3626.         }
  3627.     };
  3628.  
  3629.     this.getMainFrameUrl = function() {
  3630.         if (!isAllowUntrustedFunctions) {
  3631.             this.lastError = 1;
  3632.             return "";
  3633.         }
  3634.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3635.         return oWindow.EBUrl_CT2384137.GetPageUrl();
  3636.     };
  3637.  
  3638.     this.getMainFrameTitle = function() {
  3639.         if (!isAllowUntrustedFunctions) {
  3640.             this.lastError = 1;
  3641.             return "";
  3642.         }
  3643.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3644.         return oWindow.EBActionManager_CT2384137.GetPageTitle();
  3645.     };
  3646.  
  3647.     this.getSearchTerm = function() {
  3648.         if (!isAllowUntrustedFunctions) {
  3649.             this.lastError = 1;
  3650.             return "";
  3651.         }
  3652.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3653.         return oWindow.EBComponentsManager_CT2384137.GetSearchBoxComponent().xulMenuList.value;
  3654.     };
  3655.  
  3656.     this.getVersion = function() {
  3657.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3658.         return oWindow.EBGlobalConsts_CT2384137.ToolbarVersion;
  3659.     };
  3660.  
  3661.     this.refreshComponentById = function(strCompId) {
  3662.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3663.         return oWindow.EBToolbarManager_CT2384137.refreshComponentByIdAllWindows(strCompId);
  3664.     };
  3665.  
  3666.     var _getUrl = function() {
  3667.         return EBActionManager_CT2384137.ConvertAliasesUrl(xulBrowser.currentURI.spec);
  3668.     };
  3669.  
  3670.     var _reloadBrowser = function() {
  3671.         xulBrowser.parentNode.width = xulBrowser.width;
  3672.         setTimeout(function() { EBChevronStaticManager_CT2384137.onchange(false); }, 10);
  3673.     };
  3674. };
  3675.  
  3676. function EBBrowserCompObserver_CT2384137(that, callbackNavComplete, callbackDocComplete, callbackSearchTermChange, callbackTabSwitch, callbackGlobalKeyChanged, strWindowId) {
  3677.     this.Topic = EBObserversManager_CT2384137.ToolbarEventsTopic;
  3678.     
  3679.     //get related window id
  3680.     this.windowId = strWindowId;
  3681.  
  3682.     this.observe = function(aSubject, aTopic, aData) {
  3683.         try {
  3684.             //to this window only
  3685.             if (!aSubject || !this.windowId || this.windowId == aSubject.wrappedJSObject.windowId) {
  3686.                 switch (aData) {
  3687.                     case EBObserversManager_CT2384137.ToolbarEventsData.NavigateComplete:
  3688.                         callbackNavComplete.call(that, aSubject.wrappedJSObject.url);
  3689.                         break;
  3690.                     case EBObserversManager_CT2384137.ToolbarEventsData.DocumentComplete:
  3691.                         callbackDocComplete.call(that, aSubject.wrappedJSObject.url);
  3692.                         break;
  3693.                     case EBObserversManager_CT2384137.ToolbarEventsData.SearchTermChanged:
  3694.                         callbackSearchTermChange.call(that);
  3695.                         break;
  3696.                     //for switch tab event  
  3697.                     case EBObserversManager_CT2384137.ToolbarEventsData.TabChange:
  3698.                         callbackTabSwitch.call(that, aSubject.wrappedJSObject.url);
  3699.                         break;
  3700.                     default: break;
  3701.                 }
  3702.             }
  3703.             //to all windows
  3704.             if (aData == EBObserversManager_CT2384137.ToolbarEventsData.EBGlobalKeyChanged) {
  3705.                 callbackGlobalKeyChanged.call(that, aSubject.wrappedJSObject.key,
  3706.                                             aSubject.wrappedJSObject.value);
  3707.             }
  3708.         }
  3709.         catch (e) {
  3710.             EBLog(e, "BrowserCompObserver");
  3711.         }
  3712.     }
  3713. }
  3714.  
  3715. EBBrowserCompObserver_CT2384137.prototype = new EBBaseObserver_CT2384137();
  3716. function EBBrowserCompProgressListener_CT2384137() {
  3717.     this.xulBrowser = null;
  3718.     this.isAllowUntrustedFunctions = true;
  3719.     this.width = "";
  3720.     this.height = "";
  3721.     this.lastClickTimestamp = 0;
  3722.     this.observer = null;
  3723.     this.elementId = "";
  3724.     this.componentId = "";
  3725.     this.isGadget = false;
  3726.     this.initialUrl = "";
  3727.     this.compType = "";
  3728.     this.onloadFireOnceArr = null;
  3729.  
  3730.     this.browserCompApi = null;
  3731.  
  3732.     this.QueryInterface = function(aIID) {
  3733.         if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
  3734.        aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
  3735.        aIID.equals(Components.interfaces.nsISupports))
  3736.             return this;
  3737.         throw Components.results.NS_NOINTERFACE;
  3738.     };
  3739.     
  3740.     this.onLocationChange = function(aProgress, aRequest, aURI) { return 0; };
  3741.     this.onProgressChange = function() { return 0; };
  3742.  
  3743.     this.onStatusChange = function(aProgress, aRequest, aStatus, aMessage) {
  3744.         this._attachBCApi(aProgress.DOMWindow);
  3745.         return 0;
  3746.     };
  3747.  
  3748.     this.onSecurityChange = function(aProgress, aRequest, aState) {
  3749.         this._attachBCApi(aProgress.DOMWindow);
  3750.         return 0;
  3751.     };
  3752.     
  3753.     this.onLinkIconAvailable = function() { return 0; };
  3754.  
  3755.     this.onStateChange = function(aProgress, aRequest, aFlag, aStatus) {
  3756.         var strUrl = aRequest.name;
  3757.  
  3758.         var bIsMainBC = (aProgress.DOMWindow.name == this.componentId);
  3759.  
  3760.         if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT) {
  3761.  
  3762.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_START) {
  3763.                 var oUploadStream = null;
  3764.                 var requestMethod = "get";
  3765.                 try {
  3766.                     requestMethod = aRequest.QueryInterface(Components.interfaces.nsIHttpChannel).requestMethod.toLowerCase();
  3767.                 }
  3768.                 catch (ex) { }
  3769.  
  3770.                 if (requestMethod == "post")
  3771.                     oUploadStream = aRequest.QueryInterface(Components.interfaces.nsIUploadChannel).uploadStream;
  3772.  
  3773.                 if (bIsMainBC)
  3774.                     this._onBeforeNavigate(strUrl, oUploadStream, aRequest);
  3775.                 else
  3776.                     this._onBeforeNavigateInIFrame(strUrl, aProgress.DOMWindow);
  3777.             }
  3778.  
  3779.             //doc complete
  3780.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP) {
  3781.                 var bIsSuccess = true;
  3782.                 try {
  3783.                     var httpChannel = aRequest.QueryInterface(Components.interfaces.nsIHttpChannel);
  3784.                     var responseStatus = httpChannel.responseStatus;
  3785.                     if (responseStatus != 200)
  3786.                         bIsSuccess = false;
  3787.                 }
  3788.                 catch (ex) { }
  3789.                 this._handleTooltips(aProgress.DOMWindow);
  3790.                 this._onDocumentComplete(bIsSuccess, bIsMainBC);
  3791.                 this._attachBCApi(aProgress.DOMWindow);
  3792.             }
  3793.  
  3794.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP) { }
  3795.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_START) { }
  3796.  
  3797.             return 0;
  3798.         }
  3799.     };
  3800.  
  3801.     this.addOnloadFireOnceCallback = function(callback) {
  3802.         if (!this.onloadFireOnceArr)
  3803.             this.onloadFireOnceArr = new Array();
  3804.  
  3805.         this.onloadFireOnceArr.push(callback);
  3806.     };
  3807.  
  3808.     this.onclick = function(event) {
  3809.         this._logUserActionTimeStamp(event);
  3810.  
  3811.         //send usage
  3812.         EBUsageBrowserComponent_CT2384137.OnClick(this.componentId, event, this.compType);
  3813.     };
  3814.  
  3815.     this.onkeypress = function(event) {
  3816.         this._logUserActionTimeStamp(event);
  3817.     };
  3818.  
  3819.     //handle navigation with parameters
  3820.     this._onBeforeNavigate = function(strUrl, oUploadStream, aRequest) {
  3821.         if (this._checkDontCatchNextNavigation()) return;
  3822.  
  3823.         var originalUrl = strUrl;
  3824.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3825.         strUrl = oWindow.EBActionManager_CT2384137.ConvertAliasesUrl(strUrl, false, !this.isAllowUntrustedFunctions);
  3826.         var isAsyncStop = (oUploadStream) ? false : true;
  3827.         var strLowerCaseUrl = strUrl.toLowerCase();
  3828.  
  3829.         if (strLowerCaseUrl.indexOf("#_self") != -1)
  3830.             this._selfNavigate(strUrl, oUploadStream);
  3831.         else if (strLowerCaseUrl.indexOf("#_new") != -1) {
  3832.             this._browserStop(isAsyncStop);
  3833.             if (!this._isUserClick()) return;
  3834.             strUrl = strUrl.replace(/#_new/, "");
  3835.             oWindow.EBWeb_CT2384137.LoadURLInNewWindow(strUrl, oUploadStream);
  3836.         }
  3837.         else if (strLowerCaseUrl.indexOf("#_tab") != -1) {
  3838.             this._browserStop(isAsyncStop);
  3839.             if (!this._isUserClick()) return;
  3840.             strUrl = strUrl.replace(/#_tab/, "");
  3841.             oWindow.EBLinkManager_CT2384137.LoadLinkURL(null, strUrl, "TAB", null, null, oUploadStream);
  3842.         }
  3843.         else if (strLowerCaseUrl.indexOf("#_blank") != -1) {
  3844.             this._browserStop(isAsyncStop);
  3845.             if (!this._isUserClick()) return;
  3846.             oWindow.EBLinkManager_CT2384137.LoadLinkURL(null, "about:blank", false, null, null, oUploadStream);
  3847.         }
  3848.         else if (strLowerCaseUrl.indexOf("#_main") != -1) {
  3849.             this._browserStop(isAsyncStop);
  3850.             if (!this._isUserClick()) return;
  3851.             strUrl = strUrl.replace(/#_main/, "");
  3852.             oWindow.EBLinkManager_CT2384137.LoadLinkURL(null, strUrl, "SELF", null, null, oUploadStream);
  3853.         }
  3854.         else if (!this.isGadget && this._isUserClick()) {
  3855.             this._browserStop(isAsyncStop);
  3856.             oWindow.EBLinkManager_CT2384137.LoadLinkURL(null, strUrl, null, null, null, oUploadStream);
  3857.         }
  3858.         //regular self navigate, stop the browser and reload after aliases replaced
  3859.         //do it only if aliases present
  3860.         else if (originalUrl != strUrl && originalUrl != this.initialUrl && originalUrl != "about:blank") {
  3861.             this._selfNavigate(strUrl, oUploadStream);
  3862.         }
  3863.     };
  3864.  
  3865.     this._onBeforeNavigateInIFrame = function(strUrl, oBrowser) {
  3866.         var strOriginalUrl = strUrl;
  3867.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  3868.         strUrl = oWindow.EBActionManager_CT2384137.ConvertAliasesUrl(strUrl, false, !this.isAllowUntrustedFunctions);
  3869.         if (strOriginalUrl != strUrl) {
  3870.             oBrowser.location.href = strUrl;
  3871.         }
  3872.     };
  3873.  
  3874.     this._selfNavigate = function(strUrl, oUploadStream) {
  3875.         this._setDontCatchNextNavigation();
  3876.         strUrl = strUrl.replace(/#_self/, "");
  3877.         if (!oUploadStream)
  3878.             this.xulBrowser.loadURI(strUrl);
  3879.         else
  3880.             this.xulBrowser.webNavigation.loadURI(strUrl,
  3881.                                             Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE,
  3882.                                             null,
  3883.                                             oUploadStream,
  3884.                                             null);
  3885.     };
  3886.  
  3887.     this._setDontCatchNextNavigation = function() {
  3888.         this.xulBrowser.ebDontCatchNextNavigation = true;
  3889.     };
  3890.  
  3891.     this._checkDontCatchNextNavigation = function() {
  3892.         var val = this.xulBrowser.ebDontCatchNextNavigation;
  3893.         this.xulBrowser.ebDontCatchNextNavigation = false;
  3894.         return (typeof (val) == "undefined") ? false : val;
  3895.     };
  3896.  
  3897.     this._isTicker = function() {
  3898.         return this.initialUrl.indexOf("Components/RssTicker/") != -1 || this.initialUrl.indexOf("http://ticker.") != -1;
  3899.     };
  3900.  
  3901.     this._onDocumentComplete = function(bIsSuccess, bIsMainBC) {
  3902.         //fire attached onload callback, used to ensure that mystuff added component is visible
  3903.         if (this.onloadFireOnceArr && this.onloadFireOnceArr.length != 0) {
  3904.             var callback = null;
  3905.             for (var i = 0; i < this.onloadFireOnceArr.length; i++) {
  3906.                 callback = this.onloadFireOnceArr[i];
  3907.                 callback();
  3908.             }
  3909.  
  3910.             this.onloadFireOnceArr = null;
  3911.         }
  3912.  
  3913.         var isTicker = this._isTicker();
  3914.         if (this.xulBrowser.ebStopped && isTicker) {
  3915.             this.xulBrowser.ebStopped = false;
  3916.             return;
  3917.         }
  3918.  
  3919.         EBUILogic_Browser_CT2384137.setBrowserStyle(this.xulBrowser, isTicker);
  3920.     };
  3921.  
  3922.     this._attachTooltipHandler = function(htmlElement) {
  3923.         var showTooltip = function(htmlElement) {
  3924.             htmlElement.mouseOn = true;
  3925.             var checkIfToShow = function() {
  3926.                 if (!htmlElement.mouseOn) return;
  3927.  
  3928.                 var oTooltip = document.getElementById("eb_HTMLTooltip_CT2384137");
  3929.                 if (!oTooltip) return;
  3930.                 oTooltip.label = htmlElement.getAttribute("title");
  3931.                 if (oTooltip.openPopup)
  3932.                     oTooltip.openPopup(htmlElement, "after_end", -1, -1, true, null);
  3933.                 else {
  3934.                     //oTooltip.showPopup(null, event.screenX, event.screenY, "tooltip", null, null);
  3935.                 }
  3936.             };
  3937.  
  3938.             setTimeout(checkIfToShow, 700);
  3939.         };
  3940.  
  3941.         var hideTooltip = function(htmlElement) {
  3942.             var oTooltip = document.getElementById("eb_HTMLTooltip_CT2384137");
  3943.             if (!oTooltip) return;
  3944.             oTooltip.hidePopup();
  3945.             htmlElement.mouseOn = false;
  3946.         };
  3947.  
  3948.         htmlElement.addEventListener("mouseover", function() { showTooltip(htmlElement); }, false);
  3949.         htmlElement.addEventListener("mouseout", function() { hideTooltip(htmlElement); }, false);
  3950.     };
  3951.  
  3952.     this._handleTooltips = function(DOMWindow) {
  3953.         var objJavascript = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(DOMWindow);
  3954.         var arrElements = objJavascript.document.getElementsByTagName("*");
  3955.         if (!arrElements || arrElements.length == 0) return;
  3956.  
  3957.         for (var i = 0; i < arrElements.length; i++) {
  3958.             if (arrElements[i].getAttribute("title"))
  3959.                 this._attachTooltipHandler(arrElements[i]);
  3960.         }
  3961.     };
  3962.     
  3963.     this._attachBCApi = function(DOMWindow) {
  3964.         var objJavascript = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(DOMWindow);
  3965.         if (objJavascript.BCAPI)
  3966.             objJavascript.BCAPI = this.browserCompApi;
  3967.     };
  3968.  
  3969.     this._browserStop = function(isAsync) {
  3970.         this.xulBrowser.ebStopped = true;
  3971.         if (isAsync) {
  3972.             var xulBrowser = this.xulBrowser;
  3973.             var fStop = function() {
  3974.                 xulBrowser.webNavigation.stop(Components.interfaces.nsIWebNavigation.STOP_ALL);
  3975.             };
  3976.             setTimeout(fStop, 0);
  3977.         }
  3978.         else
  3979.             this.xulBrowser.webNavigation.stop(Components.interfaces.nsIWebNavigation.STOP_ALL);
  3980.     };
  3981.  
  3982.     this._logUserActionTimeStamp = function(event)
  3983.     {
  3984.         this.lastClickTimestamp = Date.parse(Date());
  3985.     };
  3986.  
  3987.     this._isUserClick = function() {
  3988.         if (!this.lastClickTimestamp || Date.parse(Date()) - this.lastClickTimestamp > 1000)
  3989.             return false;
  3990.         else {
  3991.             this.lastClickTimestamp = 0;
  3992.             return true;
  3993.         }
  3994.     };
  3995.  
  3996.     //main browser events handlers
  3997.     this.mainNavComplete = function(strUrl) {
  3998.         var oJavascript = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(this.xulBrowser.contentWindow);
  3999.         strUrl = (this.isAllowUntrustedFunctions) ? strUrl : "";
  4000.         if (oJavascript && oJavascript.EBNavigateComplete)
  4001.             oJavascript.setTimeout(function() { oJavascript.EBNavigateComplete(strUrl); }, EBBrowserComponentConsts_CT2384137.ApiFuncTimeout);
  4002.     };
  4003.  
  4004.     this.mainDocComplete = function(strUrl) {
  4005.         var oJavascript = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(this.xulBrowser.contentWindow);
  4006.         strUrl = (this.isAllowUntrustedFunctions) ? strUrl : "";
  4007.         if (oJavascript && oJavascript.EBDocumentComplete)
  4008.             oJavascript.setTimeout(function() { oJavascript.EBDocumentComplete(strUrl); }, EBBrowserComponentConsts_CT2384137.ApiFuncTimeout);
  4009.     };
  4010.  
  4011.     this.SearchTermChange = function() {
  4012.         var oJavascript = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(this.xulBrowser.contentWindow);
  4013.         if (oJavascript && oJavascript.EBSearchTermChanged)
  4014.             oJavascript.setTimeout(oJavascript.EBSearchTermChanged, EBBrowserComponentConsts_CT2384137.ApiFuncTimeout);
  4015.     };
  4016.     
  4017.     // switch tab event
  4018.     this.TabChange = function(strUrl) {
  4019.         var oJavascript = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(this.xulBrowser.contentWindow);
  4020.         strUrl = (this.isAllowUntrustedFunctions) ? strUrl : "";
  4021.         if (oJavascript && oJavascript.EBTabChange)
  4022.             oJavascript.setTimeout(function() { oJavascript.EBTabChange(strUrl); }, EBBrowserComponentConsts_CT2384137.ApiFuncTimeout);
  4023.     };
  4024.  
  4025.     //global back end storage changed
  4026.     this.globalKeyChanged = function(key, value) {
  4027.         var oJavascript = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(this.xulBrowser.contentWindow);
  4028.         if (oJavascript && oJavascript.EBGlobalKeyChanged)
  4029.             oJavascript.setTimeout(function() { oJavascript.EBGlobalKeyChanged(key, value); },
  4030.                                                             EBBrowserComponentConsts_CT2384137.ApiFuncTimeout);
  4031.     };
  4032.  
  4033.     this.init = function(xulBrowser, isAllowUntrustedFunctions, width, height, componentId, elementId, compType) {
  4034.         this._setMembers(xulBrowser, isAllowUntrustedFunctions, width, height, componentId, elementId, compType);
  4035.         this._initBrowserCompApi();
  4036.         this._initListeners();
  4037.         this._initObserver();
  4038.  
  4039.         //save initial url
  4040.         this.initialUrl = xulBrowser.getAttribute("src");
  4041.         xulBrowser.contentWindow.name = componentId;
  4042.     };
  4043.  
  4044.     this._setMembers = function(xulBrowser, isAllowUntrustedFunctions, width, height, componentId, elementId, compType) {
  4045.         this.xulBrowser = xulBrowser;
  4046.         this.isAllowUntrustedFunctions = isAllowUntrustedFunctions;
  4047.         this.width = width;
  4048.         this.height = height;
  4049.         this.componentId = componentId;
  4050.         this.elementId = elementId;
  4051.         this.compType = compType;
  4052.     };
  4053.     
  4054.     this._initBrowserCompApi = function() {
  4055.         this.browserCompApi = new EBBrowserCompApi_CT2384137(this.width, this.height, this.xulBrowser, this, this.componentId, this.elementId, this.compType, this.isAllowUntrustedFunctions);
  4056.     };
  4057.  
  4058.     this._initListeners = function() {
  4059.         this.xulBrowser.addProgressListener(this);
  4060.         this.xulBrowser.manager = this;
  4061.         this.xulBrowser.addEventListener('click', function(event) { this.manager.onclick(event); }, true);
  4062.         this.xulBrowser.addEventListener('keypress', function(event) { this.manager.onkeypress(event); }, true);
  4063.     };
  4064.  
  4065.     this._initObserver = function() {
  4066.         //register observer
  4067.         this.observer = new EBBrowserCompObserver_CT2384137(this,
  4068.                                                         this.mainNavComplete,
  4069.                                                         this.mainDocComplete,
  4070.                                                         this.SearchTermChange,
  4071.                                                         this.TabChange,
  4072.                                                         this.globalKeyChanged,
  4073.                                                         EBGlobalManager_CT2384137.GetMostRecentBrowserWindow().gBrowser.ebWindowId_CT2384137);
  4074.         this.observer.register();
  4075.     };
  4076.  
  4077.     this.unload = function() {
  4078.         try {
  4079.             this.xulBrowser.removeProgressListener(this);
  4080.             this.xulBrowser.removeEventListener('click', function(event) { this.manager.onclick(event); }, true);
  4081.             this.xulBrowser.removeEventListener('keypress', function(event) { this.manager.onkeypress(event); }, true);
  4082.             this.xulBrowser.manager = null;
  4083.             this.observer.unregister();
  4084.         }
  4085.         catch (e) {
  4086.             EBLogging_CT2384137.LogToConsole(e, "BrowserComp unload");
  4087.         }
  4088.     };
  4089. };
  4090.  
  4091. var EBBrowserComponentConsts_CT2384137 =
  4092. {
  4093.     Caption: 'Browser Component',
  4094.  
  4095.     Images:
  4096.     {
  4097.         MiniBrowser: 'chrome://iobitcom/skin/minibrowser.png'
  4098.     },
  4099.  
  4100.     RegistrySubBranch: 'BackEndStorage.',
  4101.     EncryptPass: 'EBEMailNotifierAcc',
  4102.  
  4103.     ApiFuncTimeout: 1500
  4104. };
  4105.  
  4106. var EBBrowserComponentApiManager_CT2384137 =
  4107. {
  4108.     GetFullPreferencePath: function(strFullUrl, strKey) {
  4109.         var strFullDomain = "";
  4110.         if (strFullUrl) {
  4111.             var iEnd = strFullUrl.lastIndexOf("/");
  4112.             strFullDomain = strFullUrl.substring(0, iEnd);
  4113.             strFullDomain = strFullDomain.replace(/\./g, '_');
  4114.             strFullDomain += ".";
  4115.         }
  4116.  
  4117.         strFullDomain = EBBrowserComponentConsts_CT2384137.RegistrySubBranch + strFullDomain + strKey;
  4118.         return strFullDomain.toLowerCase();
  4119.     }
  4120. };
  4121. function nsIWebProgressListener_CT2384137() {
  4122.     this.QueryInterface = function(aIID) {
  4123.         if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
  4124.        aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
  4125.        aIID.equals(Components.interfaces.nsISupports))
  4126.             return this;
  4127.         throw Components.results.NS_NOINTERFACE;
  4128.     };
  4129.  
  4130.     this.onStateChange = function(aProgress, aRequest, aFlag, aStatus) { return 0; };
  4131.     this.onLocationChange = function(aProgress, aRequest, aURI) { return 0; };
  4132.     this.onProgressChange = function(aProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress) { return 0; };
  4133.     this.onStatusChange = function(aProgress, aRequest, aStatus, aMessage) { return 0; };
  4134.     this.onSecurityChange = function(aProgress, aRequest, aState) { return 0; };
  4135.     this.onLinkIconAvailable = function() { return 0; };
  4136. };
  4137. function EBKnownComponents_CT2384137() {
  4138.     var hashKnownComponents = new EBArrayHashObject_CT2384137();
  4139.     hashKnownComponents.Add("GENERAL_TOOLBAR_INFO", true);
  4140.     hashKnownComponents.Add("USER_SETTINGS", true);
  4141.     
  4142.     hashKnownComponents.Add("DYNAMIC_MENU", true);
  4143.     hashKnownComponents.Add("LINK_BUTTONITEM", true);
  4144.     hashKnownComponents.Add("SPECIAL_COMMAND_ITEM", true);
  4145.     hashKnownComponents.Add("BUTTON", true);
  4146.     hashKnownComponents.Add("BROWSER_COMPONENT", true);
  4147.     hashKnownComponents.Add("SEARCH", true);
  4148.     hashKnownComponents.Add("HIGHLIGHTER", true);
  4149.     hashKnownComponents.Add("RSS_FEED_ITEM", true);
  4150.     hashKnownComponents.Add("SEPERATORITEM", true);
  4151.     hashKnownComponents.Add("PRIVACY_COMPONENT", true);
  4152.     hashKnownComponents.Add("EXTERNAL_COMPONENT", true);
  4153.     hashKnownComponents.Add("EMAIL_NOTIFIER", true);
  4154.     hashKnownComponents.Add("MULTI_RSS", true);
  4155.     hashKnownComponents.Add("WEATHER", true);
  4156.     hashKnownComponents.Add("LABEL", true);
  4157.     hashKnownComponents.Add("RADIO_PLAYER", true);
  4158.     hashKnownComponents.Add("MULTI_COMMUNITY", true);
  4159.     hashKnownComponents.Add("EMAIL_NOTIFIER_NEW", true);
  4160.     hashKnownComponents.Add("TOGGLE_COMPONENT", true);
  4161.     hashKnownComponents.Add("CHAT", true);
  4162.     hashKnownComponents.Add("TWITTER", true);
  4163.     hashKnownComponents.Add("FACEBOOK_COMP", true);
  4164.     this.isKnownComponent = function(tagName)
  4165.     {
  4166.         return tagName && hashKnownComponents.Contains(tagName);
  4167.     };
  4168. };
  4169. /*************************** Toolbar global object ******************************/
  4170. function EBToolbarData_CT2384137()
  4171. {
  4172.     //toolbar containers
  4173.     this.ToolbarInstance = null; //whole toolbar
  4174.     this.ToolbarPublisherContainer = null;  //left "publisher" section
  4175.     this.ToolbarMyStuffContainer = null;  //right "marketplace" section
  4176.  
  4177.     this.MyStuffSplitter = null;
  4178.     this.MyStuffSeparator = null;
  4179.     
  4180.     this.IsHighlighting = false;
  4181.     this.ToolbarComponents = null;
  4182.     this.MyStuffComponents = null;
  4183.     this.ToolbarSuggests = null;
  4184.     this.SelectedSearchEngine = null;
  4185.  
  4186.     this.init = function() {
  4187.         this.ToolbarInstance = document.getElementById(EBGlobalConsts_CT2384137.ToolbarId);
  4188.         this.ToolbarPublisherContainer = document.getElementById(EBGlobalConsts_CT2384137.ToolbarPublisherContainerId);
  4189.         this.ToolbarMyStuffContainer = document.getElementById(EBGlobalConsts_CT2384137.ToolbarMyStuffContainerId);
  4190.         
  4191.         this.MyStuffSplitter = document.getElementById(EBGlobalConsts_CT2384137.MyStuffSplitterId);
  4192.         this.MyStuffSeparator = document.getElementById(EBGlobalConsts_CT2384137.MyStuffSeparatorId);
  4193.         
  4194.         this.ToolbarComponents = new EBArrayHashObject_CT2384137();
  4195.         this.MyStuffComponents = new EBArrayHashObject_CT2384137();
  4196.     };
  4197.     
  4198.     this.init();
  4199. };
  4200.  
  4201. var EBMainMenuPatch_CT2384137 =
  4202. {
  4203.     MAIN_MENU_ATTR: "EB_MAIN_MENU_COMPONENT",
  4204.     MULTICOMMUNITY_ATTR: "EB_MULTICOMMUNITY_COMPONENT",
  4205.  
  4206.     onToolbarBuilt: function() {
  4207.         setTimeout(function() { EBMainMenuPatch_CT2384137.checkForTwoMenus(); }, 1000);
  4208.     },
  4209.  
  4210.     isEquals: function(xulMenuButton1, xulMenuButton2) {
  4211.         if (xulMenuButton1.image != xulMenuButton2.image) return false;
  4212.         if (xulMenuButton1.label != xulMenuButton2.label) return false;
  4213.         if (xulMenuButton1.getAttribute("type") != xulMenuButton2.getAttribute("type")) return false;
  4214.         if (xulMenuButton1.firstChild && xulMenuButton2.firstChild &&
  4215.             xulMenuButton1.firstChild.childNodes.length != xulMenuButton2.firstChild.childNodes.length) return false;
  4216.  
  4217.         return true;
  4218.     },
  4219.  
  4220.     getDeltaTime: function(strDate) {
  4221.         if (!strDate) return "";
  4222.  
  4223.         var iNow = Date.parse(Date());
  4224.         try {
  4225.             var iDate = Date.parse(strDate);
  4226.             return ((iNow - iDate) / 1000) + " sec";
  4227.         }
  4228.         catch (ex) {
  4229.             return "";
  4230.         }
  4231.     },
  4232.  
  4233.     getLastShownItemIdAndTagName: function() {
  4234.         var itemsHash = oToolbarManager_CT2384137.getToolbarData().publisherItemsHash;
  4235.         if (!itemsHash) return null;
  4236.         var item = null;
  4237.         for (var i = itemsHash.Count() - 1; i >= 0; i++) {
  4238.             item = itemsHash.GetByIndex(i);
  4239.             if (item.isShow())
  4240.                 return { "id": item.UniqueCompID, "tagName": (item.objData && item.objData.xmlNode) ? item.objData.xmlNode.tagName : "" };
  4241.         }
  4242.  
  4243.         return null;
  4244.     },
  4245.  
  4246.     sendClientLog: function(mainMenu1, mainMenu2) {
  4247.         var objToolbarInfo = new oToolbar_CT2384137.clientLog.toolbarInfo(
  4248.                     EBGlobalConsts_CT2384137.ToolbarVersion,
  4249.                     EBGlobalConsts_CT2384137.ToolbarCTID,
  4250.                     EBActionManager_CT2384137.GetCTID(),
  4251.                     EBGlobalManager_CT2384137.GetOS(),
  4252.                     EBGlobalManager_CT2384137.GetBrowserNameAndVersion());
  4253.         var msg = "Found two main menus in Firefox";
  4254.         var comp1Id = (mainMenu1.id) ? mainMenu1.id.replace(EBComponentsConsts_CT2384137.ToolbarButtonIDPrefix, "").replace(EBGlobalConsts_CT2384137.ToolbarCTID, "") : "";
  4255.         var comp2Id = (mainMenu2.id) ? mainMenu2.id.replace(EBComponentsConsts_CT2384137.ToolbarButtonIDPrefix, "").replace(EBGlobalConsts_CT2384137.ToolbarCTID, "") : "";
  4256.         var data = EBXML_CT2384137.CreateXmlNodeStartString("ERR_DESCRIPTION");
  4257.         data += EBXML_CT2384137.CreateXmlNodeString("FirstMenuID", comp1Id);
  4258.         data += EBXML_CT2384137.CreateXmlNodeString("SecondMenuID", comp2Id);
  4259.         data += EBXML_CT2384137.CreateXmlNodeString("SecondMenuHasMainMenuAttr", mainMenu2.hasAttribute(this.MAIN_MENU_ATTR));
  4260.         data += EBXML_CT2384137.CreateXmlNodeString("SettingsLastCheckTimeDelta",
  4261.                                     this.getDeltaTime(EBToolbarPreferenceManager_CT2384137.GetPref("SettingsLastCheckTime")));
  4262.         data += EBXML_CT2384137.CreateXmlNodeString("LastLoginDelta",
  4263.                                     this.getDeltaTime(EBToolbarPreferenceManager_CT2384137.GetPref("LastLogin_2.5.2.14")));
  4264.         data += EBXML_CT2384137.CreateXmlNodeString("LPLastCheckTimeDelta",
  4265.                                     this.getDeltaTime(EBToolbarPreferenceManager_CT2384137.GetPref("LanguagePackLastCheckTime")));
  4266.         data += EBXML_CT2384137.CreateXmlNodeString("InstalledDate",
  4267.                                     EBToolbarPreferenceManager_CT2384137.GetPref("InstalledDate"));
  4268.  
  4269.         var lastShownItemData = this.getLastShownItemIdAndTagName();
  4270.         if (lastShownItemData) {
  4271.             data += EBXML_CT2384137.CreateXmlNodeStartString("LastShownItem");
  4272.             data += EBXML_CT2384137.CreateXmlNodeString("id", lastShownItemData.id);
  4273.             data += EBXML_CT2384137.CreateXmlNodeString("tagName", lastShownItemData.tagName);
  4274.             data += EBXML_CT2384137.CreateXmlNodeEndString("LastShownItem");
  4275.         }
  4276.  
  4277.         data += EBXML_CT2384137.CreateXmlNodeEndString("ERR_DESCRIPTION");
  4278.  
  4279.         var objEvent = new oToolbar_CT2384137.clientLog.event(50, "ERROR", msg, data);
  4280.         oToolbar_CT2384137.clientLog.manager.send(objToolbarInfo, objEvent);
  4281.         EBLog("sent client log about second menu");
  4282.     },
  4283.  
  4284.     removeSecondMenu: function(mainMenu2) {
  4285.         var xulPublisherContainer = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarPublisherContainer;
  4286.         xulPublisherContainer.removeChild(mainMenu2.parentNode);
  4287.         EBLog("removed second menu");
  4288.     },
  4289.  
  4290.     onTwoMenusFound: function(mainMenu1, mainMenu2) {
  4291.         this.sendClientLog(mainMenu1, mainMenu2);
  4292.         this.removeSecondMenu(mainMenu2);
  4293.     },
  4294.  
  4295.     checkForTwoMenus: function() {
  4296.         try {
  4297.             var xulPublisherContainer = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarPublisherContainer;
  4298.             var xulItems = xulPublisherContainer.childNodes;
  4299.             if (!xulItems || xulItems.length == 0) return;
  4300.             var xulItem = null;
  4301.             var xulToolbarButton = null;
  4302.             var arrMenus = new Array();
  4303.             var i;
  4304.  
  4305.             for (i = 0; i < xulItems.length; i++) {
  4306.                 xulItem = xulItems[i];
  4307.                 if (xulItem.tagName == "toolbaritem" && xulItem.firstChild && xulItem.firstChild.tagName == "toolbarbutton") {
  4308.                     xulToolbarButton = xulItem.firstChild;
  4309.                     if (xulToolbarButton.getAttribute("type"))
  4310.                         arrMenus.push(xulToolbarButton);
  4311.                 }
  4312.             }
  4313.  
  4314.             if (arrMenus.length < 2) return;
  4315.  
  4316.             var xulFirstMainMenu = null;
  4317.             if (arrMenus[0].hasAttribute(this.MULTICOMMUNITY_ATTR)) {
  4318.                 xulFirstMainMenu = arrMenus[1];
  4319.                 arrMenus.splice(0, 2);
  4320.             }
  4321.             else {
  4322.                 xulFirstMainMenu = arrMenus[0];
  4323.                 arrMenus.splice(0, 1);
  4324.             }
  4325.  
  4326.             if (arrMenus.length == 0) return;
  4327.  
  4328.             for (i = 0; i < arrMenus.length; i++) {
  4329.                 if (this.isEquals(xulFirstMainMenu, arrMenus[i])) {
  4330.                     this.onTwoMenusFound(xulFirstMainMenu, arrMenus[i])
  4331.                     return;
  4332.                 }
  4333.             }
  4334.         }
  4335.         catch (ex) {
  4336.             EBLog(ex);
  4337.         }
  4338.     }
  4339. };
  4340. function EBToolbarBuilder_CT2384137(oToolbarData) {
  4341.     var arrComponentsHash = new EBArrayHashObject_CT2384137();
  4342.  
  4343.     this.clearUnwantedXulElements = function(toolbarContainer, publisherContainer) {
  4344.         if (!toolbarContainer || !publisherContainer) return;
  4345.         while (toolbarContainer.firstChild.id != publisherContainer.id) {
  4346.             if (toolbarContainer.firstChild.tagName == "toolbarseparator")
  4347.                 toolbarContainer.removeChild(toolbarContainer.firstChild);
  4348.         }
  4349.     };
  4350.     
  4351.     this.clearComponents = function(hashComponents, toolbarContainer) {
  4352.         if (!hashComponents || hashComponents.Count() == 0) return;
  4353.  
  4354.         var component = null;
  4355.         for (var i = 0; i < hashComponents.Count(); i++) {
  4356.             component = hashComponents.GetByIndex(i);
  4357.             component.RemoveFromToolbar(toolbarContainer);
  4358.         }
  4359.  
  4360.         hashComponents.Clear();
  4361.     };
  4362.  
  4363.     this.clearContainer = function(toolbarContainer) {
  4364.         //empty xulElement that not part of any components (like last element in rtl toolbars)
  4365.         while (toolbarContainer.firstChild)
  4366.             toolbarContainer.removeChild(toolbarContainer.firstChild);
  4367.     };
  4368.  
  4369.     this.buildComponents = function(itemsHash, componentsHash, toolbarContainer) {
  4370.         if (!itemsHash || itemsHash.Count() == 0 || !toolbarContainer) return;
  4371.  
  4372.         var item = null;
  4373.         var component = null;
  4374.  
  4375.         for (var i = 0; i < itemsHash.Count(); i++) {
  4376.             item = itemsHash.GetByIndex(i);
  4377.             if (item.isShow()) {
  4378.                 component = EBToolbarFactoryComponent_CT2384137.GetInstance(item);
  4379.                 if (component && !componentsHash.Contains(item.UniqueCompID) && component.Init()) {
  4380.                     try {
  4381.                         componentsHash.Add(item.UniqueCompID, component);
  4382.                         component.AddToToolbar(toolbarContainer);
  4383.                     }
  4384.                     catch (ex) {
  4385.                         EBLog(ex, "failed to add component to toolbar");
  4386.                     }
  4387.                 }
  4388.             }
  4389.         }
  4390.     };
  4391.  
  4392.     this.buildPublisherSection = function() {
  4393.         //clear old components
  4394.         var dto = EBToolbarManager_CT2384137.dataToolbarObject;
  4395.         this.clearComponents(dto.ToolbarComponents, dto.ToolbarPublisherContainer);
  4396.         this.clearContainer(dto.ToolbarPublisherContainer);
  4397.  
  4398.         this.buildComponents(oToolbarData.publisherItemsHash, dto.ToolbarComponents, dto.ToolbarPublisherContainer);
  4399.         this.buildComponents(oToolbarData.thirdPartyItemsHash, dto.ToolbarComponents, dto.ToolbarPublisherContainer);
  4400.         this.buildComponents(oToolbarData.userItemsHash, dto.ToolbarComponents, dto.ToolbarPublisherContainer);
  4401.  
  4402.         //add empty flexable component to the end of the toolbar for resizer to work.
  4403.         if (EBGlobalManager_CT2384137.IsToolbarRTL()) {
  4404.             this.XULPostToolbarItem = EBXULFactory_CT2384137.CreateToolbarItem();
  4405.             this.XULPostToolbarItem.setAttribute("pack", "end");
  4406.             this.XULPostToolbarItem.setAttribute("flex", "1");
  4407.             dto.ToolbarPublisherContainer.appendChild(this.XULPostToolbarItem);
  4408.         }
  4409.     };
  4410.  
  4411.     this.buildMyStuffComponents = function() {
  4412.         //clear old components
  4413.         this.clearComponents(EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents, EBToolbarManager_CT2384137.dataToolbarObject.ToolbarMyStuffContainer);
  4414.         this.clearContainer(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarMyStuffContainer);
  4415.         this.buildComponents(oToolbarData.myStuffItemsHash, EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents, EBToolbarManager_CT2384137.dataToolbarObject.ToolbarMyStuffContainer);
  4416.     };
  4417.  
  4418.     this.buildAll = function() {
  4419.         //ensure that no component other than is should be are persisted on the toolbar.
  4420.         //remove all xul elements before publisher container
  4421.         //fix stumple upon issue
  4422.         this.clearUnwantedXulElements(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarInstance, EBToolbarManager_CT2384137.dataToolbarObject.ToolbarPublisherContainer);
  4423.  
  4424.         this.buildPublisherSection();
  4425.         this.buildMyStuffComponents();
  4426.     };
  4427.  
  4428.     this.destroyAll = function() {
  4429.         this.clearComponents(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents, EBToolbarManager_CT2384137.dataToolbarObject.ToolbarPublisherContainer);
  4430.         this.clearComponents(EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents, EBToolbarManager_CT2384137.dataToolbarObject.ToolbarMyStuffContainer);
  4431.         this.clearContainer(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarPublisherContainer);
  4432.         this.clearContainer(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarMyStuffContainer);
  4433.     };
  4434. };
  4435. function EBToolbarComponentsEvents_CT2384137() {
  4436.     var onBeforeRefresh = function(componentsHash) {
  4437.         if (!componentsHash || componentsHash.Count() == 0) return;
  4438.         
  4439.         for (var i = 0; i < componentsHash.Count(); i++)
  4440.             componentsHash.GetByIndex(i).OnBeforeRefresh();
  4441.     };
  4442.  
  4443.     var onLanguagePackChange = function(componentsHash) {
  4444.         if (!componentsHash || componentsHash.Count() == 0) return;
  4445.  
  4446.         for (var i = 0; i < componentsHash.Count(); i++)
  4447.             componentsHash.GetByIndex(i).OnLanguagePackChange();
  4448.     };
  4449.  
  4450.     var onShrinkUnshrink = function(componentsHash) {
  4451.         if (!componentsHash || componentsHash.Count() == 0) return;
  4452.  
  4453.         for (var i = 0; i < componentsHash.Count(); i++)
  4454.             componentsHash.GetByIndex(i).SetToolbarButtonClass();
  4455.     };
  4456.  
  4457.     this.onBeforeRefresh = function() {
  4458.         onBeforeRefresh(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents);
  4459.         onBeforeRefresh(EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents);
  4460.     };
  4461.  
  4462.     this.onLanguagePackChange = function() {
  4463.         onLanguagePackChange(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents);
  4464.         onLanguagePackChange(EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents);
  4465.     };
  4466.  
  4467.     this.onShrinkUnshrink = function() {
  4468.         onShrinkUnshrink(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents);
  4469.         onShrinkUnshrink(EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents);
  4470.     };
  4471. };
  4472. var EBToolbarFactoryComponent_CT2384137 =
  4473. {
  4474.     GetInstance: function(oToolbarItem) {
  4475.         if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.dynamicMenu)
  4476.             return new EBDynamicMenuComponent_CT2384137(oToolbarItem);
  4477.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.button)
  4478.             return new EBButtonComponent_CT2384137(oToolbarItem);
  4479.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.browserComponent)
  4480.             return new EBBrowserComponent_CT2384137(oToolbarItem);
  4481.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.searchBox)
  4482.             return new EBSearchBoxComponent_CT2384137(oToolbarItem);
  4483.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.highlighter)
  4484.             return new EBHighlighterComponent_CT2384137(oToolbarItem);
  4485.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.separator)
  4486.             return new EBSeparatorComponent_CT2384137(oToolbarItem);
  4487.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.feed)
  4488.             return new EBFeedComponent_CT2384137(oToolbarItem);
  4489.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.privacy)
  4490.             return new EBPrivacyComponent_CT2384137(oToolbarItem);
  4491.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.externalComponent)
  4492.             return new EBExternalComponent_CT2384137(oToolbarItem);
  4493.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.emailNotifier)
  4494.             return new EBEMailNotifierComponent_CT2384137(oToolbarItem);
  4495.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.multiFeed)
  4496.             return new EBMultiFeedComponent_CT2384137(oToolbarItem);
  4497.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.weather)
  4498.             return new EBWeatherComponent_CT2384137(oToolbarItem);
  4499.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.label)
  4500.             return new EBLabelComponent_CT2384137(oToolbarItem);
  4501.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.radio)
  4502.             return new EBRadioComponent_CT2384137(oToolbarItem);
  4503.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.multicommunity)
  4504.             return new EBMultiCommunityComponent_CT2384137(oToolbarItem);
  4505.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.toggleComponent)
  4506.             return new EBToggleComponent_CT2384137(oToolbarItem);
  4507.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.chat)
  4508.             return new EBChatComponent_CT2384137(oToolbarItem);
  4509.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.myStuffWithOptions)
  4510.             return new EBMyStuffWithOptionsComponent_CT2384137(oToolbarItem);
  4511.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.myStuff)
  4512.             return new EBMyStuffComponent_CT2384137(oToolbarItem);
  4513.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.twitter)
  4514.             return new EBTwitterComponent_CT2384137(oToolbarItem);
  4515.         else if (oToolbarItem instanceof oToolbar_CT2384137.toolbarDataParsing.toolbarItems.facebook)
  4516.             return new EBFacebookComponent_CT2384137(oToolbarItem);
  4517.         return null;
  4518.     }
  4519. };
  4520. function EBToolbarDataObserver_CT2384137() {
  4521.     this.Topic = oToolbar_CT2384137.toolbarDataParsing.observerTopic;
  4522.  
  4523.     this.observe = function(aSubject, aTopic, aData) {
  4524.         aSubject = aSubject.wrappedJSObject;
  4525.         
  4526.         if (aSubject.originalCTID != EBGlobalConsts_CT2384137.ToolbarCTID ||
  4527.             aSubject.actingCTID != EBActionManager_CT2384137.GetCTID())
  4528.             return;
  4529.  
  4530.         switch (aData) {
  4531.             case oToolbar_CT2384137.toolbarDataParsing.observerData.settings:
  4532.                 EBToolbarManager_CT2384137.onSettingsChange();
  4533.                 break;
  4534.  
  4535.             case oToolbar_CT2384137.toolbarDataParsing.observerData.userAddComponents:
  4536.                 EBToolbarManager_CT2384137.onUserAddedComponentsChanged();
  4537.                 break;
  4538.  
  4539.             case oToolbar_CT2384137.toolbarDataParsing.observerData.thirdParty:
  4540.                 EBToolbarManager_CT2384137.onThirdPartyChange();
  4541.                 break;
  4542.  
  4543.             case oToolbar_CT2384137.toolbarDataParsing.observerData.myStuff:
  4544.                 EBToolbarManager_CT2384137.onMyStuffChange();
  4545.                 break;
  4546.  
  4547.             case oToolbar_CT2384137.toolbarDataParsing.observerData.languagePack:
  4548.                 EBToolbarManager_CT2384137.onLanguagePackChange();
  4549.                 break;
  4550.  
  4551.             case oToolbar_CT2384137.toolbarDataParsing.observerData.switchCommunity:
  4552.                 EBToolbarManager_CT2384137.switchCommunity();
  4553.                 break;
  4554.  
  4555.             case oToolbar_CT2384137.toolbarDataParsing.observerData.myStuffSwitchedOn:
  4556.                 EBToolbarManager_CT2384137.checkToShowHideMyStuff();
  4557.                 break;
  4558.  
  4559.             default: break;
  4560.         }
  4561.     };
  4562. };
  4563.  
  4564. EBToolbarDataObserver_CT2384137.prototype = new EBBaseObserver_CT2384137();
  4565. var EBToolbarManager_CT2384137 =
  4566. {
  4567.     toolbarBuilder: null,
  4568.     toolbarDataObserver: null,
  4569.     toolbarComponentsEventsManager: null,
  4570.     dataToolbarObject: null,
  4571.     chevronManager: null,
  4572.     myStuffChevronManager: null,
  4573.     myStuffManager: null,
  4574.     init_eventListeners: false,
  4575.  
  4576.     getToolbarDefaultsData: function() {
  4577.         var oToolbarData = new oToolbar_CT2384137.toolbar.toolbarDefaultsData();
  4578.         oToolbarData.settingsUrl = EBGlobalConsts_CT2384137.ServerUrl;
  4579.         oToolbarData.loginUrl = EBGlobalConsts_CT2384137.ServerUrl;
  4580.         oToolbarData.thirdPartyUrl = EBGlobalConsts_CT2384137.ServerUrl;
  4581.         oToolbarData.languagePackUrl = EBGlobalConsts_CT2384137.LanguagePackUrl;
  4582.         oToolbarData.webServerUrl = EBGlobalConsts_CT2384137.WebServerUrl;
  4583.         oToolbarData.myStuffUrl = EBGlobalConsts_CT2384137.MyStuffServiceUrl;
  4584.         oToolbarData.myStuffSearchUrl = EBGlobalConsts_CT2384137.MyStuffSearchUrl;
  4585.         oToolbarData.myStuffEnabled = EBGlobalConsts_CT2384137.MyStuffEnabled;
  4586.         oToolbarData.isMC = EBGlobalConsts_CT2384137.MultiCommunity;
  4587.         oToolbarData.isGrouping = EBGlobalConsts_CT2384137.Grouping;
  4588.         oToolbarData.version = EBGlobalConsts_CT2384137.ToolbarVersion;
  4589.         oToolbarData.chromeName = EBGlobalConsts_CT2384137.ToolbarId;
  4590.         oToolbarData.fix404Enabled = EBGlobalConsts_CT2384137.FixPageNotFoundErrorsEnabled;
  4591.         oToolbarData.fix404Checked = EBGlobalConsts_CT2384137.FixPageNotFoundErrorsChecked;
  4592.         oToolbarData.sendValidationData = true;
  4593.         oToolbarData.alertSource = EBAlertManager_CT2384137.MainToolbarID;
  4594.         oToolbarData.knownComponents = new EBKnownComponents_CT2384137();
  4595.         oToolbarData.searchInNewTab = true;
  4596.  
  4597.         return oToolbarData;
  4598.     },
  4599.  
  4600.     buildToolbar: function() {
  4601.         EBInitParams_CT2384137.initFromSettings();
  4602.         EBUILogic_Toolbar_CT2384137.checkDirection();
  4603.         //skin object 
  4604.         oToolbarSkin_CT2384137 = oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.skin;
  4605.         EBToolbarCssFunctions_CT2384137.checkToLoadWindowsXPThemeCSSStyleSheet(oToolbarSkin_CT2384137);
  4606.         EBUILogic_Toolbar_CT2384137.setToolbarSkin(oToolbarSkin_CT2384137);
  4607.         //create chevron managers
  4608.         if (!this.chevronManager)
  4609.             this.chevronManager = new EBToolbarChevronManager_CT2384137(this.dataToolbarObject.ToolbarPublisherContainer,
  4610.                                                                     this.dataToolbarObject.ToolbarComponents,
  4611.                                                                     this.dataToolbarObject.MyStuffSplitter);
  4612.         //Clear Toggle Components
  4613.         //TODO: toggle component manager, should not be static, add is as child of component
  4614.         EBToggleComponentManager_CT2384137.Clear();
  4615.  
  4616.         this.toolbarBuilder.buildAll();
  4617.         this.checkToShowHideMyStuff();
  4618.  
  4619.         //add event listeners only after toolbar build, because events could be dipatched to unexisting components 
  4620.         //like chevron which uses search component
  4621.         this.addEventListeners();
  4622.         EBChevronStaticManager_CT2384137.onchange(true);
  4623.         EBInitializeToolbarManager_CT2384137.Initialize();
  4624.  
  4625.         EBSearchFromAddressBar_CT2384137.onload();
  4626.         EBMainMenuPatch_CT2384137.onToolbarBuilt();
  4627.  
  4628.  
  4629.     },
  4630.  
  4631.     addEventListeners: function() {
  4632.         if (this.init_eventListeners) return;
  4633.  
  4634.         this.init_eventListeners = true;
  4635.         //add to main window progressive listener
  4636.         window.getBrowser().addProgressListener(EBMainBrowserListener_CT2384137);
  4637.  
  4638.         //add to main window progress listener in XPCOM
  4639.         //TODO: figure out how to listen to new window open in xpcom, and attach the progress listener from there
  4640.         oToolbar_CT2384137.webProgress.manager.addProgressListener(getBrowser());
  4641.  
  4642.         window.addEventListener("focus", EBWindowFocus_CT2384137, true);
  4643.         window.addEventListener("blur", EBWindowBlur_CT2384137, true);
  4644.         window.addEventListener("resize", EBWindowResize_CT2384137, false);
  4645.         window.addEventListener("mousemove", EBWindowMouseMove_CT2384137, false);
  4646.         window.addEventListener("mouseup", EBWindowMouseUp_CT2384137, false);
  4647.         window.addEventListener("unload", EBWindowUnLoad_CT2384137, false);
  4648.     },
  4649.  
  4650.     initMyStuff: function() {
  4651.  
  4652.         var oSearchBoxComp = EBComponentsManager_CT2384137.GetSearchBoxComponent();
  4653.         this.myStuffChevronManager = new EBMyStuffChevronManager_CT2384137(this.dataToolbarObject.ToolbarMyStuffContainer,
  4654.                                                                         this.dataToolbarObject.MyStuffComponents,
  4655.                                                                         this.dataToolbarObject.MyStuffSplitter,
  4656.                                                                         oSearchBoxComp.xulSplitter,
  4657.                                                                         oSearchBoxComp.xulMenuList);
  4658.         this.myStuffManager = new EBMyStuffManager_CT2384137();
  4659.         this.dataToolbarObject.MyStuffSplitter.style.display = "";
  4660.         this.dataToolbarObject.ToolbarMyStuffContainer.style.display = "";
  4661.     },
  4662.  
  4663.     checkToShowHideMyStuff: function() {
  4664.         if (oToolbarManager_CT2384137.myStuffEnabled() && !this.myStuffManager)
  4665.             this.initMyStuff();
  4666.         else if (!oToolbarManager_CT2384137.myStuffEnabled()) {
  4667.             this.myStuffChevronManager = null;
  4668.             this.myStuffManager = null;
  4669.             this.dataToolbarObject.MyStuffSplitter.style.display = "none";
  4670.             this.dataToolbarObject.MyStuffSeparator.style.display = "none";
  4671.             this.dataToolbarObject.ToolbarMyStuffContainer.style.display = "none";
  4672.         }
  4673.     },
  4674.  
  4675.     onload: function() {
  4676.         if (!EBGroupingManager_CT2384137.canInitToolbar()) {
  4677.             EBGroupingManager_CT2384137.initFirstTime();
  4678.             return;
  4679.         }
  4680.  
  4681.         this.dataToolbarObject = new EBToolbarData_CT2384137();
  4682.  
  4683.         //toolbar data observer
  4684.         this.toolbarDataObserver = new EBToolbarDataObserver_CT2384137();
  4685.         this.toolbarDataObserver.register();
  4686.  
  4687.         //choose who will listen to API
  4688.         EBActionManager_CT2384137.AmILatestToolbarVersion();
  4689.  
  4690.         oToolbarManager_CT2384137 = oToolbar_CT2384137.toolbar.getManager(EBGlobalConsts_CT2384137.ToolbarCTID, EBActionManager_CT2384137.GetCTID());
  4691.         oToolbarManager_CT2384137.register(this.getToolbarDefaultsData());
  4692.  
  4693.         this.toolbarBuilder = new EBToolbarBuilder_CT2384137(oToolbarManager_CT2384137.getToolbarData());
  4694.         this.toolbarComponentsEventsManager = new EBToolbarComponentsEvents_CT2384137();
  4695.  
  4696.         if (oToolbarManager_CT2384137.isReady()) {
  4697.             this.buildToolbar();
  4698.         }
  4699.     },
  4700.  
  4701.     onunload: function(bCheckIfShown) {
  4702.         if (bCheckIfShown && !EBActionManager_CT2384137.IsToolbarShown()) return;
  4703.  
  4704.         EBActionManager_CT2384137.CloseToolbarDialogs();
  4705.         this.toolbarDataObserver.unregister();
  4706.         oToolbarManager_CT2384137.unregister();
  4707.  
  4708.         this.toolbarBuilder.destroyAll();
  4709.         this.toolbarBuilder = null;
  4710.         this.toolbarComponentsEventsManager = null;
  4711.  
  4712.         this.chevronManager = null;
  4713.         this.myStuffChevronManager = null;
  4714.         this.myStuffManager = null;
  4715.         this.dataToolbarObject = null;
  4716.  
  4717.         if (bCheckIfShown)
  4718.             EBSearchFromAddressBar_CT2384137.onunload();
  4719.     },
  4720.  
  4721.     switchCommunity: function() {
  4722.         this.onunload(false);
  4723.         this.onload();
  4724.         EBChevronStaticManager_CT2384137.onWindowResize(null);
  4725.     },
  4726.  
  4727.     onSettingsChange: function() {
  4728.         this.buildToolbar();
  4729.     },
  4730.  
  4731.     onThirdPartyChange: function() {
  4732.         //TODO:
  4733.     },
  4734.  
  4735.     onUserAddedComponentsChanged: function() {
  4736.         this.toolbarBuilder.buildPublisherSection();
  4737.         EBChevronStaticManager_CT2384137.onchange(true);
  4738.     },
  4739.  
  4740.     onMyStuffChange: function() {
  4741.         this.toolbarBuilder.buildMyStuffComponents();
  4742.         EBChevronStaticManager_CT2384137.onchange(true);
  4743.     },
  4744.  
  4745.     onLanguagePackChange: function() {
  4746.         EBInitParams_CT2384137.initFromLP();
  4747.         if (this.myStuffManager)
  4748.             this.myStuffChevronManager.onLanguagePackChange();
  4749.  
  4750.         //add here global toolbar change
  4751.         this.toolbarComponentsEventsManager.onLanguagePackChange();
  4752.     },
  4753.  
  4754.     onBeforeRefreshAllWindows: function() {
  4755.         var arrWindows = EBGlobalManager_CT2384137.GetAllWindows();
  4756.         var oWindow = null;
  4757.         for (var i = 0; i < arrWindows.length; i++) {
  4758.             oWindow = arrWindows[i];
  4759.             if (oWindow.EBToolbarManager_CT2384137)
  4760.                 oWindow.EBToolbarManager_CT2384137.onBeforeRefresh();
  4761.         }
  4762.     },
  4763.  
  4764.     refreshComponentByIdAllWindows: function(strCompId) {
  4765.         var oComponent = EBComponentsManager_CT2384137.GetComponentByCompID(strCompId);
  4766.         if (!oComponent)
  4767.             return false;
  4768.  
  4769.         var arrWindows = EBGlobalManager_CT2384137.GetAllWindows();
  4770.         var oWindow = null;
  4771.         for (var i = 0; i < arrWindows.length; i++) {
  4772.             oWindow = arrWindows[i];
  4773.             if (oWindow.EBToolbarManager_CT2384137) {
  4774.                 //refreshComponentById will return false if should be refreshed only one instance of the toolbar,
  4775.                 //meening that component will handle the broadcast to other instances.
  4776.                 if (!oWindow.EBToolbarManager_CT2384137.refreshComponentById(strCompId))
  4777.                     break;
  4778.             }
  4779.         }
  4780.         return true;
  4781.     },
  4782.  
  4783.     refreshComponentById: function(strCompId) {
  4784.         var oComponent = EBComponentsManager_CT2384137.GetComponentByCompID(strCompId);
  4785.         if (oComponent)
  4786.             return oComponent.RefreshComponent();
  4787.  
  4788.         return true;
  4789.     },
  4790.  
  4791.     onBeforeRefresh: function() {
  4792.         this.toolbarComponentsEventsManager.onBeforeRefresh();
  4793.     },
  4794.  
  4795.     onShrinkUnshrinkAllWindows: function() {
  4796.         var arrWindows = EBGlobalManager_CT2384137.GetAllWindows();
  4797.         var oWindow = null;
  4798.         for (var i = 0; i < arrWindows.length; i++) {
  4799.             oWindow = arrWindows[i];
  4800.             if (oWindow.EBToolbarManager_CT2384137)
  4801.                 oWindow.EBToolbarManager_CT2384137.onShrinkUnshrink();
  4802.         }
  4803.     },
  4804.  
  4805.     onShrinkUnshrink: function() {
  4806.         this.toolbarComponentsEventsManager.onShrinkUnshrink();
  4807.  
  4808.         //get the toggle command element to change it's caption
  4809.         var objShrinkUnshrinkToggleElements = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarInstance.getElementsByAttribute(EBPreferenceConsts_CT2384137.ToolbarShrink, EBPreferenceConsts_CT2384137.ToolbarShrink);
  4810.         if (objShrinkUnshrinkToggleElements[0])
  4811.             EBDynamicMenuManager_CT2384137.ReDrawToggleCommandElement(objShrinkUnshrinkToggleElements[0]);
  4812.  
  4813.         EBChevronStaticManager_CT2384137.onchange(false);
  4814.     },
  4815.  
  4816.     broadcastRebuild: function(strData) {
  4817.         var aSubject = new Object();
  4818.         aSubject.wrappedJSObject = aSubject;
  4819.         aSubject.originalCTID = EBGlobalConsts_CT2384137.ToolbarCTID;
  4820.         aSubject.actingCTID = EBActionManager_CT2384137.GetCTID();
  4821.  
  4822.         EBObserversManager_CT2384137.NotifyCustomObserver(aSubject,
  4823.                                         oToolbar_CT2384137.toolbarDataParsing.observerTopic,
  4824.                                         strData);
  4825.     }
  4826. };
  4827.  
  4828. function EBChatObserver_CT2384137(objCallback, that) {
  4829.     this.Topic = "EBChat";
  4830.     this.thatCallback = that;
  4831.     this.callback = objCallback;
  4832.  
  4833.     this.observe = function(aSubject, aTopic, strCTID) {
  4834.         try {
  4835.             if (strCTID == EBActionManager_CT2384137.GetCTID()) {
  4836.                 this.callback.call(this.thatCallback, aSubject);
  4837.             }
  4838.         }
  4839.         catch (err) { }
  4840.     };
  4841. }
  4842.  
  4843. EBChatObserver_CT2384137.prototype = new EBBaseObserver_CT2384137();
  4844. var EBChatStaticManager_CT2384137 =
  4845. {
  4846.     OnToolbarRefresh: function(bInvalidateCache) {
  4847.         var oChat = EBComponentsManager_CT2384137.GetChatComponent();
  4848.         if (!oChat) return;
  4849.  
  4850.         oChat.onToolbarRefresh(bInvalidateCache);
  4851.     },
  4852.  
  4853.     ForceRefresh: function() {
  4854.         var oChat = EBComponentsManager_CT2384137.GetChatComponent();
  4855.         if (!oChat) return;
  4856.  
  4857.         oChat.reInit(true);
  4858.     }
  4859. }
  4860. function ChatMenuUIManager_CT2384137(chatComponent) {
  4861.     this.chatManager = null;
  4862.     this.xulMenuPopup = null;
  4863.     this.componentId = "";
  4864.     this.compType = "";
  4865.     this.buttonId = "";
  4866.     this.iconUrl = "";
  4867.     this.defaultRoom = null;
  4868.  
  4869.     this.init = function(objChatManager, xulButton, strCompId, strCompType, objDefaultRoom) {
  4870.         this.chatManager = objChatManager;
  4871.         this.componentId = strCompId;
  4872.         this.buttonId = xulButton.getAttribute("id");
  4873.         this.iconUrl = xulButton.getAttribute("image");
  4874.         this.defaultRoom = objDefaultRoom;
  4875.  
  4876.         this._correctDefaultRoomData(xulButton);
  4877.         this._createMainButtonCommand(xulButton);
  4878.         this._createDynamicMenuPopup(xulButton);
  4879.     };
  4880.  
  4881.     //used for toolbar <---> chevron
  4882.     this.updateMenuPopup = function(xulMenuPopup) {
  4883.         this.xulMenuPopup = xulMenuPopup;
  4884.     };
  4885.  
  4886.     //populate menu on menu showing event, get the latest data from the core
  4887.     this.onMenuShowing = function() {
  4888.         var objRoomsData = this.chatManager.getRoomsInfo();
  4889.         var objProvidersRoomsData = this.chatManager.getProvidersRoomsInfo();
  4890.         this._buildMenuItems(objRoomsData, objProvidersRoomsData);
  4891.         EBUsageChat_CT2384137.OnOpenMenu();
  4892.     };
  4893.  
  4894.     //remove all items from the menu
  4895.     this.onMenuHiding = function() {
  4896.         this._removeMenuItems();
  4897.         //usage
  4898.         var compId = this.componentId;
  4899.         var compType = this.compType;
  4900.         var oTimed = function() {
  4901.             EBUsageChat_CT2384137.OnCloseMenu(compId, compId, compType);
  4902.         };
  4903.  
  4904.         setTimeout(oTimed, 200);
  4905.     };
  4906.  
  4907.     //add label and/or image to the default room if not exists
  4908.     this._correctDefaultRoomData = function(xulButton) {
  4909.         if (!this.defaultRoom.name)
  4910.             this.defaultRoom.name = xulButton.getAttribute("label");
  4911.  
  4912.         if (!this.defaultRoom.iconUrl)
  4913.             this.defaultRoom.iconUrl = xulButton.getAttribute("image");
  4914.     };
  4915.  
  4916.     this._createMainButtonCommand = function(xulButton) {
  4917.         //add open default chat room to button, after initing the menu, because the function is in menu object
  4918.         var objCommand = this.getCommand(this.defaultRoom, EBUsageChat_CT2384137.SourceButton);
  4919.         xulButton.addEventListener("command", objCommand, false);
  4920.     };
  4921.  
  4922.     this._createDynamicMenuPopup = function(xulButton) {
  4923.         //set the event to the popupmenu for usage
  4924.         var strOnPopupShowing = "this.manager.onMenuShowing()";
  4925.         var strOnPopupHiding = "this.manager.onMenuHiding()";
  4926.         this.xulMenuPopup = EBXULFactory_CT2384137.CreateMenuPopup("", strOnPopupShowing, strOnPopupHiding);
  4927.         this.xulMenuPopup.manager = this;
  4928.         
  4929.         xulButton.appendChild(this.xulMenuPopup);
  4930.     };
  4931.  
  4932.     this._buildMenuItems = function(objRoomsData, objProvidersRoomsData) {
  4933.         if (objRoomsData && (objRoomsData.publisherRooms || objRoomsData.publicRooms)) {
  4934.             //add publisher rooms
  4935.             this._buildRoomsMenuItems(objRoomsData.publisherRooms, objProvidersRoomsData);
  4936.  
  4937.             //add separator between publisher rooms and public rooms
  4938.             if (objRoomsData.publisherRooms && objRoomsData.publicRooms)
  4939.                 this.xulMenuPopup.appendChild(EBXULFactory_CT2384137.CreateMenuSeparator());
  4940.  
  4941.             //add public rooms
  4942.             this._buildRoomsMenuItems(objRoomsData.publicRooms, objProvidersRoomsData);
  4943.         }
  4944.         //create one default room
  4945.         else
  4946.             this._buildDefaultRoomMenuItem();
  4947.     };
  4948.  
  4949.     this._buildRoomsMenuItems = function(hashRooms, objProvidersRoomsData) {
  4950.         var oRoomData = null;
  4951.         var iParticipantsCount;
  4952.         var oProvider = null;
  4953.         var objProviderRoomData = null;
  4954.  
  4955.         if (hashRooms) {
  4956.             for (var i = 0; i < hashRooms.Count(); i++) {
  4957.                 oRoomData = hashRooms.GetByIndex(i);
  4958.                 iParticipantsCount = null;
  4959.                 if (oRoomData.providerRoomInfo && objProvidersRoomsData) {
  4960.                     oProvider = objProvidersRoomsData.GetByID(oRoomData.providerRoomInfo.providerType);
  4961.                     if (oProvider) {
  4962.                         objProviderRoomData = oProvider.roomsDataHash.GetByID(oRoomData.providerRoomInfo.roomId);
  4963.                         if (objProviderRoomData)
  4964.                             iParticipantsCount = objProviderRoomData.participants;
  4965.                     }
  4966.                 }
  4967.  
  4968.                 this.xulMenuPopup.appendChild(this._buildMenuItem(oRoomData, iParticipantsCount));
  4969.             }
  4970.         }
  4971.     };
  4972.  
  4973.     this._buildDefaultRoomMenuItem = function() {
  4974.         this.xulMenuPopup.appendChild(this._buildMenuItem(this.defaultRoom, null));
  4975.     };
  4976.  
  4977.     this._buildMenuItem = function(oRoomData, iParticipantsCount) {
  4978.         var strLabel = oRoomData.name;
  4979.         var strParticipants = this._getMenuItemParticipantsCaption(iParticipantsCount);
  4980.         var strImage = oRoomData.iconUrl;
  4981.         var strTooltip = oRoomData.name;
  4982.         var objCommand = this.getCommand(oRoomData, EBUsageChat_CT2384137.SourceMenu);
  4983.         var strName = "";
  4984.         var arrData = null;
  4985.  
  4986.         var xulMenuItem = EBXULFactory_CT2384137.CreateMenuItem(strLabel, strImage, strTooltip, objCommand, strName, arrData);
  4987.         xulMenuItem.setAttribute("acceltext", strParticipants);
  4988.  
  4989.  
  4990.         return xulMenuItem;
  4991.     };
  4992.  
  4993.     //create command to open chat gadget from chat room data
  4994.     this.getCommand = function(oRoomData, strSource) {
  4995.         var strUrl = EBActionManager_CT2384137.ConvertAliasesUrl(oRoomData.url);
  4996.         var popHtmlData = new oToolbar_CT2384137.toolbarDataParsing.dataObjects.PopHtml();
  4997.         popHtmlData.popHtmlUrl = this._convertAliasesUrl(strUrl);
  4998.         popHtmlData.parentElement = chatComponent.XULElement;
  4999.         popHtmlData.openPositionType = popHtmlData.openPositionTypes.alignment;
  5000.         popHtmlData.openPositionData.vertical = popHtmlData.openPositionTypes.verticalAlignmentBottom;
  5001.         popHtmlData.width = 700;
  5002.         popHtmlData.height = 560;
  5003.         popHtmlData.resizable = true;
  5004.         popHtmlData.isUser = false;
  5005.         popHtmlData.componentId = this.componentId;
  5006.         popHtmlData.elementId = this.componentId;
  5007.         popHtmlData.compType = this.compType;
  5008.         popHtmlData.source = strSource;
  5009.         popHtmlData.gadgetType = EBGadgetManager_CT2384137.GADGET_TYPE_CHAT;
  5010.         popHtmlData.chatRoomId = oRoomData.id;
  5011.         popHtmlData.titleIconUrl = this.iconUrl;
  5012.         var strButtonId = this.buttonId;
  5013.         var commandFunc = function(event) {
  5014.             popHtmlData.parentElement = document.getElementById(strButtonId);
  5015.             EBGadgetManager_CT2384137.OpenGadget(popHtmlData);
  5016.             event.cancelBubble = true;
  5017.         };
  5018.  
  5019.         return commandFunc;
  5020.     };
  5021.  
  5022.     this._convertAliasesUrl = function(strUrl) {
  5023.         strUrl = EBActionManager_CT2384137.ConvertAliasesUrl(strUrl);
  5024.         return strUrl;
  5025.     };
  5026.  
  5027.     this._getMenuItemParticipantsCaption = function(iParticipantsCount) {
  5028.         if (iParticipantsCount != null && iParticipantsCount != -1)
  5029.             return "[" + iParticipantsCount + "]";
  5030.         else
  5031.             return "";
  5032.     };
  5033.     
  5034.     this._removeMenuItems = function() {
  5035.         while (this.xulMenuPopup.childNodes.length > 0)
  5036.             this.xulMenuPopup.removeChild(this.xulMenuPopup.firstChild);
  5037.     };
  5038. };
  5039. var EBDefaultsManager_CT2384137 = {
  5040.     defaultsFolder: "chrome://iobitcom/skin/defaults/",
  5041.  
  5042.     manifestFileName: "manifest.xml",
  5043.  
  5044.     settingsFilePath: "",
  5045.     imagesHash: null,
  5046.  
  5047.     isInit: false,
  5048.     isImagesInit: false,
  5049.     isSettingsInit: false,
  5050.  
  5051.     checkIcon: function(xulElement) {
  5052.         //lazy init
  5053.         if (!this.isInit) this.init();
  5054.         if (!this.isImagesInit) return;
  5055.  
  5056.         var strImageUrl = "";
  5057.         if (xulElement.tagName == "image")
  5058.             strImageUrl = xulElement.getAttribute("src");
  5059.         else
  5060.             strImageUrl = xulElement.getAttribute("image");
  5061.         //if no icon defined, nothing to check
  5062.         if (!strImageUrl) return;
  5063.  
  5064.         //find if icon is in defaults, if not, return
  5065.         var strFullLocalPath = this.checkFileAndGetFullPath(strImageUrl);
  5066.         if (!strFullLocalPath) return;
  5067.  
  5068.         xulElement.setAttribute("image", strFullLocalPath);
  5069.     },
  5070.  
  5071.     getImageUrl: function(strImageUrl) {
  5072.         //lazy init
  5073.         if (!this.isInit) this.init();
  5074.         if (!this.isImagesInit) return strImageUrl;
  5075.  
  5076.         var strFullLocalPath = this.checkFileAndGetFullPath(strImageUrl);
  5077.  
  5078.         if (strFullLocalPath)
  5079.             return strFullLocalPath;
  5080.         else
  5081.             return strImageUrl;
  5082.     },
  5083.  
  5084.     checkFileAndGetFullPath: function(strIconUrl) {
  5085.         if (!this.imagesHash || this.imagesHash.Count() == 0 || !this.imagesHash.Contains(strIconUrl)) return "";
  5086.  
  5087.         var strLocalPath = this.imagesHash.GetByID(strIconUrl);
  5088.         if (strLocalPath)
  5089.             return this.defaultsFolder + strLocalPath.replace(/\\/g, "/");
  5090.         else
  5091.             return "";
  5092.     },
  5093.  
  5094.     getAndCopySettingsFile: function() {
  5095.         //lazy init
  5096.         if (!this.isInit) this.init();
  5097.         if (!this.isSettingsInit) return null;
  5098.         var xmlSettings = EBXML_CT2384137.GetXmlDocumentFromUrl(this.defaultsFolder + this.settingsFilePath);
  5099.         var oFile = null;
  5100.  
  5101.         if (xmlSettings)
  5102.             oFile = this.copySettingsFile(xmlSettings);
  5103.  
  5104.         return oFile;
  5105.     },
  5106.  
  5107.     //copy the settings file from defaults and delete it in defaults
  5108.     copySettingsFile: function(xmlSettings) {
  5109.         try {
  5110.             var strSettings = EBXML_CT2384137.GetStringXml(xmlSettings);
  5111.             var oDestFile = EBIOManager_CT2384137.CreateToolbarFile(EBServerCommunicationConsts_CT2384137.SETTINGS_FILE_NAME);
  5112.             EBFileIO_CT2384137.write(oDestFile, strSettings, null, EBGlobalConsts_CT2384137.DefaultCharset);
  5113.             return oDestFile;
  5114.         }
  5115.         catch (e) {
  5116.             return null;
  5117.         }
  5118.     },
  5119.  
  5120.     getManifestXml: function() {
  5121.         var xmlManifest = EBXML_CT2384137.GetXmlDocumentFromUrl(this.defaultsFolder + this.manifestFileName);
  5122.         return xmlManifest;
  5123.     },
  5124.  
  5125.     init: function() {
  5126.         this.isInit = true;
  5127.  
  5128.         var xmlDoc = this.getManifestXml();
  5129.         if (!xmlDoc) {
  5130.             return;
  5131.         }
  5132.  
  5133.         var xmlSettings = EBXML_CT2384137.SelectSingleNode(xmlDoc, "settings");
  5134.         var xmlImages = EBXML_CT2384137.SelectSingleNode(xmlDoc, "images");
  5135.         this.initSettings(xmlSettings);
  5136.         this.initImages(xmlImages);
  5137.     },
  5138.  
  5139.     initSettings: function(xmlSettings) {
  5140.         if (!xmlSettings) {
  5141.             return;
  5142.         }
  5143.  
  5144.         this.settingsFilePath = EBXML_CT2384137.GetSingleNodeValue(xmlSettings, "local_file_path");
  5145.         this.isSettingsInit = true;
  5146.     },
  5147.  
  5148.     initImages: function(xmlImages) {
  5149.         this.imagesHash = new EBArrayHashObject_CT2384137();
  5150.         if (!xmlImages || xmlImages.childNodes.length == 0) return;
  5151.  
  5152.         var arrImages = xmlImages.getElementsByTagName("image");
  5153.         var oImageData = null;
  5154.  
  5155.         for (var i = 0; i < arrImages.length; i++) {
  5156.             oImageData = new Defaults_ImageData_CT2384137(arrImages[i]);
  5157.             this.imagesHash.Add(oImageData.originalPath, oImageData.localPath);
  5158.         }
  5159.  
  5160.         this.isImagesInit = true;
  5161.     }
  5162. }
  5163.  
  5164. function Defaults_ImageData_CT2384137(xmlImage) {
  5165.     this.originalPath;
  5166.     this.localPath;
  5167.  
  5168.     this.init = function(xmlImage) {
  5169.         this.originalPath = EBXML_CT2384137.GetSingleNodeValue(xmlImage, "original_path");
  5170.         this.localPath = EBXML_CT2384137.GetSingleNodeValue(xmlImage, "local_file_path");
  5171.     };
  5172.  
  5173.     this.init(xmlImage);
  5174. }
  5175. /////////////////////////////////////////////////
  5176. /////////////////////////////////////////////////
  5177. //
  5178. // Basic JavaScript File and Directory IO module
  5179. // By: MonkeeSage, v0.1
  5180. //
  5181. /////////////////////////////////////////////////
  5182. /////////////////////////////////////////////////
  5183.  
  5184.     /////////////////////////////////////////////////
  5185.     // Basic file IO object based on Mozilla source 
  5186.     // code post at forums.mozillazine.org
  5187.     /////////////////////////////////////////////////
  5188.  
  5189.     // Example use:
  5190.     // var fileIn = FileIO.open('/test.txt');
  5191.     // if (fileIn.exists()) {
  5192.     //     var fileOut = FileIO.open('/copy of test.txt');
  5193.     //     var str = FileIO.read(fileIn);
  5194.     //     var rv = FileIO.write(fileOut, str);
  5195.     //     al('File write: ' + rv);
  5196.     //     rv = FileIO.write(fileOut, str, 'a');
  5197.     //     al('File append: ' + rv);
  5198.     //     rv = FileIO.unlink(fileOut);
  5199.     //     al('File unlink: ' + rv);
  5200.     // }
  5201.  
  5202. var EBFileIO_CT2384137 =
  5203. {
  5204.  
  5205.     localfileCID: '@mozilla.org/file/local;1',
  5206.     localfileIID: Components.interfaces.nsILocalFile,
  5207.  
  5208.     finstreamCID: '@mozilla.org/network/file-input-stream;1',
  5209.     finstreamIID: Components.interfaces.nsIFileInputStream,
  5210.  
  5211.     foutstreamCID: '@mozilla.org/network/file-output-stream;1',
  5212.     foutstreamIID: Components.interfaces.nsIFileOutputStream,
  5213.  
  5214.     sinstreamCID: '@mozilla.org/scriptableinputstream;1',
  5215.     sinstreamIID: Components.interfaces.nsIScriptableInputStream,
  5216.  
  5217.     suniconvCID: '@mozilla.org/intl/scriptableunicodeconverter',
  5218.     suniconvIID: Components.interfaces.nsIScriptableUnicodeConverter,
  5219.  
  5220.     open: function(path) {
  5221.         try {
  5222.             var file = Components.classes[this.localfileCID]
  5223.                             .createInstance(this.localfileIID);
  5224.             file.initWithPath(path);
  5225.             return file;
  5226.         }
  5227.         catch (e) {
  5228.             return false;
  5229.         }
  5230.     },
  5231.  
  5232.     read: function(file, charset) {
  5233.         try {
  5234.             var data = new String();
  5235.             var fiStream = Components.classes[this.finstreamCID]
  5236.                                 .createInstance(this.finstreamIID);
  5237.             var siStream = Components.classes[this.sinstreamCID]
  5238.                                 .createInstance(this.sinstreamIID);
  5239.             fiStream.init(file, 1, 0, false);
  5240.             siStream.init(fiStream);
  5241.             data += siStream.read(-1);
  5242.             siStream.close();
  5243.             fiStream.close();
  5244.             if (charset) {
  5245.                 data = this.toUnicode(charset, data);
  5246.             }
  5247.             return data;
  5248.         }
  5249.         catch (e) {
  5250.             return false;
  5251.         }
  5252.     },
  5253.  
  5254.     write: function(file, data, mode, charset) {
  5255.         try {
  5256.             var foStream = Components.classes[this.foutstreamCID]
  5257.                                 .createInstance(this.foutstreamIID);
  5258.             if (charset) {
  5259.                 data = this.fromUnicode(charset, data);
  5260.             }
  5261.             var flags = 0x02 | 0x08 | 0x20; // wronly | create | truncate
  5262.             if (mode == 'a') {
  5263.                 flags = 0x02 | 0x10; // wronly | append
  5264.             }
  5265.             foStream.init(file, flags, 0664, 0);
  5266.             foStream.write(data, data.length);
  5267.             // foStream.flush();
  5268.             foStream.close();
  5269.             return true;
  5270.         }
  5271.         catch (e) {
  5272.             return false;
  5273.         }
  5274.     },
  5275.  
  5276.     create: function(file) {
  5277.         try {
  5278.             file.create(0x00, 0664);
  5279.             return true;
  5280.         }
  5281.         catch (e) {
  5282.             return false;
  5283.         }
  5284.     },
  5285.  
  5286.     unlink: function(file) {
  5287.         try {
  5288.             file.remove(false);
  5289.             return true;
  5290.         }
  5291.         catch (e) {
  5292.             return false;
  5293.         }
  5294.     },
  5295.  
  5296.     path: function(file) {
  5297.         try {
  5298.             return 'file:///' + file.path.replace(/\\/g, '\/')
  5299.                         .replace(/^\s*\/?/, '').replace(/\ /g, '%20');
  5300.         }
  5301.         catch (e) {
  5302.             return false;
  5303.         }
  5304.     },
  5305.  
  5306.     toUnicode: function(charset, data) {
  5307.         try {
  5308.             var uniConv = Components.classes[this.suniconvCID]
  5309.                                 .createInstance(this.suniconvIID);
  5310.             uniConv.charset = charset;
  5311.             data = uniConv.ConvertToUnicode(data);
  5312.         }
  5313.         catch (e) {
  5314.             // foobar!
  5315.         }
  5316.         return data;
  5317.     },
  5318.  
  5319.     fromUnicode: function(charset, data) {
  5320.         try {
  5321.             var uniConv = Components.classes[this.suniconvCID]
  5322.                                 .createInstance(this.suniconvIID);
  5323.             uniConv.charset = charset;
  5324.             data = uniConv.ConvertFromUnicode(data);
  5325.             // data += uniConv.Finish();
  5326.         }
  5327.         catch (e) {
  5328.             // foobar!
  5329.         }
  5330.         return data;
  5331.     }
  5332. };
  5333.  
  5334.  
  5335. /////////////////////////////////////////////////
  5336. // Basic Directory IO object based on JSLib 
  5337. // source code found at jslib.mozdev.org
  5338. /////////////////////////////////////////////////
  5339.  
  5340. // Example use:
  5341. // var dir = DirIO.open('/test');
  5342. // if (dir.exists()) {
  5343. //     al(DirIO.path(dir));
  5344. //     var arr = DirIO.read(dir, true), i;
  5345. //     if (arr) {
  5346. //         for (i = 0; i < arr.length; ++i) {
  5347. //             al(arr[i].path);
  5348. //         }
  5349. //     }
  5350. // }
  5351. // else {
  5352. //     var rv = DirIO.create(dir);
  5353. //     al('Directory create: ' + rv);
  5354. // }
  5355.  
  5356. // ---------------------------------------------
  5357. // ----------------- Nota Bene -----------------
  5358. // ---------------------------------------------
  5359. // Some possible types for get are:
  5360. //     'ProfD'                = profile
  5361. //     'DefProfRt'            = user (e.g., /root/.mozilla)
  5362. //     'UChrm'                = %profile%/chrome
  5363. //     'DefRt'                = installation
  5364. //     'PrfDef'            = %installation%/defaults/pref
  5365. //     'ProfDefNoLoc'        = %installation%/defaults/profile
  5366. //     'APlugns'            = %installation%/plugins
  5367. //     'AChrom'            = %installation%/chrome
  5368. //     'ComsD'                = %installation%/components
  5369. //     'CurProcD'            = installation (usually)
  5370. //     'Home'                = OS root (e.g., /root)
  5371. //     'TmpD'                = OS tmp (e.g., /tmp)
  5372.  
  5373. var EBDirIO_CT2384137 =
  5374. {
  5375.  
  5376.     sep: '/',
  5377.  
  5378.     dirservCID: '@mozilla.org/file/directory_service;1',
  5379.  
  5380.     propsIID: Components.interfaces.nsIProperties,
  5381.  
  5382.     fileIID: Components.interfaces.nsIFile,
  5383.  
  5384.     Get: function(type) {
  5385.         try {
  5386.             var dir = Components.classes[this.dirservCID]
  5387.                             .createInstance(this.propsIID)
  5388.                             .get(type, this.fileIID);
  5389.             return dir;
  5390.         }
  5391.         catch (e) {
  5392.             return false;
  5393.         }
  5394.     },
  5395.  
  5396.     open: function(path) {
  5397.         return EBFileIO_CT2384137.open(path);
  5398.     },
  5399.  
  5400.     create: function(dir) {
  5401.         try {
  5402.             dir.create(0x01, 0755);
  5403.             //make sure we can read and write to and from the directory
  5404.             if (!dir.isReadable() || !dir.isWritable()) {
  5405.                 dir.permissions = 0755;
  5406.             }
  5407.             return true;
  5408.         }
  5409.         catch (e) {
  5410.             return false;
  5411.         }
  5412.     },
  5413.  
  5414.     read: function(dir, recursive) {
  5415.         var list = new Array();
  5416.         try {
  5417.             if (dir.isDirectory()) {
  5418.                 if (recursive == null) {
  5419.                     recursive = false;
  5420.                 }
  5421.                 var files = dir.directoryEntries;
  5422.                 list = this._read(files, recursive);
  5423.             }
  5424.         }
  5425.         catch (e) {
  5426.             // foobar!
  5427.         }
  5428.         return list;
  5429.     },
  5430.  
  5431.     _read: function(dirEntry, recursive) {
  5432.         var list = new Array();
  5433.         try {
  5434.             while (dirEntry.hasMoreElements()) {
  5435.                 list.push(dirEntry.getNext()
  5436.                                 .QueryInterface(EBFileIO_CT2384137.localfileIID));
  5437.             }
  5438.             if (recursive) {
  5439.                 var list2 = new Array();
  5440.                 for (var i = 0; i < list.length; ++i) {
  5441.                     if (list[i].isDirectory()) {
  5442.                         files = list[i].directoryEntries;
  5443.                         list2 = this._read(files, recursive);
  5444.                     }
  5445.                 }
  5446.                 for (i = 0; i < list2.length; ++i) {
  5447.                     list.push(list2[i]);
  5448.                 }
  5449.             }
  5450.         }
  5451.         catch (e) {
  5452.             // foobar!
  5453.         }
  5454.         return list;
  5455.     },
  5456.  
  5457.     unlink: function(dir, recursive) {
  5458.         try {
  5459.             if (recursive == null) {
  5460.                 recursive = false;
  5461.             }
  5462.             dir.remove(recursive);
  5463.             return true;
  5464.         }
  5465.         catch (e) {
  5466.             return false;
  5467.         }
  5468.     },
  5469.  
  5470.     path: function(dir) {
  5471.         return EBFileIO_CT2384137.path(dir);
  5472.     },
  5473.  
  5474.     split: function(str, join) {
  5475.         var arr = str.split(/\/|\\/), i;
  5476.         str = new String();
  5477.         for (i = 0; i < arr.length; ++i) {
  5478.             str += arr[i] + ((i != arr.length - 1) ?
  5479.                                     join : '');
  5480.         }
  5481.         return str;
  5482.     },
  5483.  
  5484.     join: function(str, split) {
  5485.         var arr = str.split(split), i;
  5486.         str = new String();
  5487.         for (i = 0; i < arr.length; ++i) {
  5488.             str += arr[i] + ((i != arr.length - 1) ?
  5489.                                     this.sep : '');
  5490.         }
  5491.         return str;
  5492.     }
  5493. };
  5494.  
  5495. if(navigator.platform.toLowerCase().indexOf('win') > -1)
  5496. {
  5497.     EBDirIO_CT2384137.sep = '\\';
  5498. }
  5499.  
  5500.  
  5501.  
  5502. var EBIOManager_CT2384137 =
  5503. {
  5504.     GetPrefsDir: function() {
  5505.         return EBDirIO_CT2384137.Get('ProfD');
  5506.     },
  5507.  
  5508.     GetSearchPluginsDir: function() {
  5509.         return EBDirIO_CT2384137.Get("SrchPlugns");
  5510.     },
  5511.  
  5512.     GetExtentionPath: function(id) {
  5513.         var strExtPath = "";
  5514.         try {
  5515.             var ext = Components.classes["@mozilla.org/extensions/manager;1"]
  5516.                     .getService(Components.interfaces.nsIExtensionManager)
  5517.                     .getInstallLocation(id)
  5518.                     .getItemLocation(id);
  5519.             strExtPath = ext.path;
  5520.         }
  5521.         catch (ex) {
  5522.             strExtPath = "";
  5523.         }
  5524.  
  5525.         finally {
  5526.             return strExtPath;
  5527.         }
  5528.     },
  5529.  
  5530.     CreateDir: function(strDirName) {
  5531.         var ebDirPath = this.GetPrefsDir().path + EBDirIO_CT2384137.sep + strDirName;
  5532.         var ebDir = EBDirIO_CT2384137.open(ebDirPath);
  5533.         if (!ebDir.exists()) {
  5534.             EBDirIO_CT2384137.create(ebDir);
  5535.         }
  5536.         return ebDir;
  5537.     },
  5538.  
  5539.     CreateToolbarFile: function(strFileName) {
  5540.         var ebFile = null;
  5541.         try {
  5542.             var ebDir = this.CreateDir(EBGlobalConsts_CT2384137.ToolbarCTID);
  5543.             ebFile = EBFileIO_CT2384137.open(ebDir.path + EBDirIO_CT2384137.sep + strFileName);
  5544.             if (!ebFile.exists()) {
  5545.                 EBFileIO_CT2384137.create(ebFile);
  5546.             }
  5547.         }
  5548.         catch (err) {
  5549.             ebFile = null;
  5550.         }
  5551.         finally {
  5552.             return ebFile;
  5553.         }
  5554.     },
  5555.  
  5556.     CreateSuggestFile: function(strFileName) {
  5557.         var ebFile = null;
  5558.         try {
  5559.             var ebDir = this.CreateDir(EBGlobalConsts_CT2384137.SuggestHistoryFolderName);
  5560.             ebFile = EBFileIO_CT2384137.open(ebDir.path + EBDirIO_CT2384137.sep + strFileName);
  5561.             if (!ebFile.exists()) {
  5562.                 EBFileIO_CT2384137.create(ebFile);
  5563.             }
  5564.         }
  5565.         catch (err) {
  5566.             ebFile = null;
  5567.         }
  5568.         finally {
  5569.             return ebFile;
  5570.         }
  5571.     },
  5572.  
  5573.     DeleteToolbarDirectory: function() {
  5574.         var bRetVal = false;
  5575.         try {
  5576.             var objEBDir = this.CreateDir(EBGlobalConsts_CT2384137.ToolbarCTID);
  5577.             EBDirIO_CT2384137.unlink(objEBDir, true);
  5578.             bRetVal = true;
  5579.         }
  5580.         catch (err) {
  5581.             bRetVal = false;
  5582.         }
  5583.  
  5584.         return bRetVal;
  5585.     },
  5586.  
  5587.     DeleteSuggestDirectory: function() {
  5588.         var bRetVal = false;
  5589.         try {
  5590.             var objEBDir = this.CreateDir(EBGlobalConsts_CT2384137.SuggestHistoryFolderName);
  5591.             EBDirIO_CT2384137.unlink(objEBDir, true);
  5592.             bRetVal = true;
  5593.         }
  5594.         catch (err) {
  5595.             bRetVal = false;
  5596.         }
  5597.  
  5598.         return bRetVal;
  5599.     },
  5600.  
  5601.     IsToolbarFileExists: function(strFileName) {
  5602.         var bRetVal = false;
  5603.         try {
  5604.             var ebDir = this.CreateDir(EBGlobalConsts_CT2384137.ToolbarCTID);
  5605.             var ebFile = EBFileIO_CT2384137.open(ebDir.path + EBDirIO_CT2384137.sep + strFileName);
  5606.             bRetVal = ebFile.exists();
  5607.         }
  5608.         catch (err) {
  5609.             bRetVal = false;
  5610.         }
  5611.  
  5612.         return bRetVal;
  5613.     }
  5614. };
  5615. var EBPreferenceConsts_CT2384137 = 
  5616. {
  5617.     SearchBoxWidth                            : 'SearchBoxWidth',
  5618.     SearchEngine                            : 'SearchEngine',
  5619.     SearchBackToDefault                        : 'SearchBackToDefaultEngine',
  5620.     LoginCallDate                            : 'LastLogin',
  5621.     UserID                                    : 'UserID',
  5622.     LoginCache                                : 'LoginCache',
  5623.     SettingsLastUpdateTime                  : 'SettingsLastUpdate',
  5624.     SettingsInvalidateCache                 : 'SettingsInvalidateCache',
  5625.     LanguagePackLastCheckTime                : 'LanguagePackLastCheckTime',
  5626.     LanguagePackReloadIntervalMM: 'LanguagePackReloadIntervalMM',
  5627.     LanguagePackServiceUrl: 'LanguagePackServiceUrl',
  5628.     ServerURL                                : 'Server',
  5629.     CTID                                    : 'CTID',
  5630.     ToolbarName                                : 'ToolbarName',
  5631.     PreviouseCTID                            : 'PreviouseCTID',
  5632.     PreviouseToolbarName                    : 'PreviouseToolbarName',
  5633.     ToolbarType                                : 'Type',
  5634.     MyWebServerURL                            : 'MyWebServerURL',
  5635.     ToolbarShrink                            : 'SHRINK_TOOLBAR',
  5636.     EMailNotifierPollDate                    : 'EMailNotifierPollDate',
  5637.     EMailNotifierSound                        : 'EMailNotifierSound',
  5638.     EMailNotifierCheckInterval                : 'EMailNotifierCheckInterval',
  5639.     FeedPollDatePrefix: 'FeedPollDate',
  5640.     FeedTTLPrefix: "FeedTTL",
  5641.     ExternalComponentPrefix: 'ExternalComponentPollDate',
  5642.     ExternalComponentCacheMode: 'ExternalComponentCacheMode',
  5643.     Uninstall                                : 'Uninstall',
  5644.     Initialize                                : 'Initialize',
  5645.     InitializeCommonPrefs                   : 'InitializeCommonPrefs',   
  5646.     WeatherPollDate                            : 'WeatherPollDate',
  5647.     WeatherUnit                                : 'WeatherUnit',
  5648.     WeatherNetwork                            : 'WeatherNetwork',
  5649.     WeatherNextIFeelLuckyCheck                : 'WeatherNextIFeelLuckyCheck',
  5650.     ThirdPartyComponentsLastCheck            : 'ThirdPartyComponentsLastCheck',
  5651.     ThirdPartyComponentsLastUpdate            : 'ThirdPartyComponentsLastUpdate',
  5652.     ThirdPartyComponentsInterval            : 'ThirdPartyComponentsInterval',
  5653.     Locale                                    : 'Locale',
  5654.     FirstTime                                : 'FirstTime',
  5655.     FirstTimeFF3: 'FirstTimeFF3',
  5656.     InstalledDate: 'InstalledDate',
  5657.     DialogsAlignMode                        : 'DialogsAlignMode',
  5658.     ToolbarAlignMode                        : 'ToolbarAlignMode',
  5659.     EnableSearchHistory                        : 'EnableSearchHistory',
  5660.     EnableSearchSuggest                        : 'EnableSearchSuggest',
  5661.     EnableUsage                                : 'EnableUsage',
  5662.     EnableClickToSearchBox                    : 'EnableClickToSearchBox',
  5663.     
  5664.     IsMulticommunity                        : 'IsMulticommunity',
  5665.     IsGrouping                                : 'IsGrouping',
  5666.     GroupingLastCheckTime                    : 'GroupingLastCheckTime',
  5667.     GroupingInvalidateCache                 : 'GroupingInvalidateCache',
  5668.     GroupingLastCheckResponse                : 'GroupingLastResponse',
  5669.     GroupingLastServerUpdateTime            : 'GroupingLastServerUpdateTime',
  5670.     GroupingLastErrorCode                    : 'GroupingLastErrorCode',
  5671.     GroupingServerCheckInterval                : 'GroupingServerCheckInterval',
  5672.     CommunitiesChangesLastCheckTime            : 'CommunitiesChangesLastCheckTime',
  5673.     CommunityChanged: 'CommunityChanged',
  5674.     GroupingServiceUrl: 'GroupingServiceUrl',
  5675.     
  5676.     VusualLastUpdateTime                    : 'VusualLastUpdateTime',
  5677.     CTPBaseServerUrl                        : 'CTPBaseServerUrl',
  5678.     MCDetectTooltipShow                     : 'MCDetectTooltipShow',
  5679.     MCDetectTooltipWidth                    : 'MCDetectTooltipWidth',
  5680.     MCDetectTooltipHeight                   : 'MCDetectTooltipHeight',
  5681.     MCDetectTooltipUrl                      : 'MCDetectTooltipUrl',
  5682.     DownloadDomainsListLastCheckTime        : 'DownloadDomainsListLastCheckTime',
  5683.     DownloadDomainsListLastServerUpdateTime : 'DownloadDomainsListLastServerUpdateTime',
  5684.     DownloadDomainsCheckInterval            : 'DownloadDomainsCheckInterval',
  5685.     ToggleComponentState                    : 'ToggleComponentState',
  5686.     AboutPrivacyUrl                         : 'AboutPrivacyUrl',
  5687.     SuggestWindowWidth                      : 'SuggestWindowWidth',
  5688.     SuggestWindowHeight                     : 'SuggestWindowHeight',
  5689.     AllowNonPrivacy                         : 'AllowNonPrivacy',
  5690.     FixPageNotFoundErrors                   : 'FixPageNotFoundErrors',
  5691.     FixPageNotFoundUrl                      : 'FixPageNotFoundUrl',
  5692.     UsageServerURL                          : 'UsageServerURL',
  5693.     IsOpenThankYouPage                      : 'IsOpenThankYouPage',
  5694.     IsOpenUninstallPage                     : 'IsOpenUninstallPage',
  5695.     SearchFromAddressBarUrl                 : 'SearchFromAddressBarUrl',
  5696.     TrusteLinkUrl                           : 'TrusteLinkUrl',
  5697.     
  5698.     //Secondary Search
  5699.     SearchTimeAverage                       : 'SearchTimeAverage',
  5700.     SearchesCount                           : 'SearchesCount',
  5701.  
  5702.     SearchFromAddressBarIsInit: 'SearchFromAddressBarIsInit',
  5703.  
  5704.     PublisherContainerWidth: "PublisherContainerWidth",
  5705.     
  5706.     ValidationData_Search: "ValidationData_Search",
  5707.     ValidationData_Toolbar: "ValidationData_Toolbar",
  5708.     SearchInNewTabUserEnabled: "SearchInNewTabUserEnabled",
  5709.     FirstServerDate: "FirstServerDate",
  5710.     CurrentServerDate: "CurrentServerDate",
  5711.     SearchInNewTabUserEnabled: "SearchInNewTabUserEnabled",
  5712.     SavedHomepage: "SavedHomepage",
  5713.     IsToolbarSelectedFromGrouping: "IsToolbarSelectedFromGrouping",
  5714.     
  5715.     //Common
  5716.     MyGadgetsIsVisible                      : 'MyGadgetsIsVisible',
  5717.     ToolbarsList                            : 'ToolbarsList',
  5718.     //list for toolbars with search from address bar 
  5719.     ToolbarsList2                           : 'ToolbarsList2',
  5720.     MiniIPageGadgetPosition                 : 'MiniIPageGadgetPosition',
  5721.     MiniIPageGadgetSize                     : 'MiniIPageGadgetSize',
  5722.     MyGadgetsIsHighlight                    : 'MyGadgetsIsHighlight',
  5723.     MyGadgetsShowDetectDialog               : 'MyGadgetsShowDetectDialog',
  5724.     SearchFromAddressBarSavedUrl: 'SearchFromAddressBarSavedUrl',
  5725.     FeedDeleteDontAskAgain: "FeedDeleteDontAskAgain"
  5726. }
  5727.  
  5728.  
  5729.  
  5730. //interface to write/read from the prefrence file(about:config) - 
  5731. //the registry of firefox
  5732. var EBPreferenceService_CT2384137 = 
  5733. {
  5734.     PREFERENCE_SERVICE : Components.classes["@mozilla.org/preferences-service;1"].
  5735.                 getService(Components.interfaces.nsIPrefBranch),
  5736.                 
  5737.     GetPref : function(strName) 
  5738.     {
  5739.         var strRetVal;
  5740.         try 
  5741.         {
  5742.             switch(this.PREFERENCE_SERVICE.getPrefType(strName)) 
  5743.             {
  5744.                 case this.PREFERENCE_SERVICE.PREF_BOOL:
  5745.                     strRetVal = this.PREFERENCE_SERVICE.getBoolPref(strName);
  5746.                     break;
  5747.                 case this.PREFERENCE_SERVICE.PREF_INT:
  5748.                     strRetVal = this.PREFERENCE_SERVICE.getIntPref(strName);
  5749.                     break;
  5750.                 case this.PREFERENCE_SERVICE.PREF_STRING:
  5751.                     strRetVal = this.PREFERENCE_SERVICE.getCharPref(strName);
  5752.                     break;
  5753.                 default:
  5754.                     strRetVal = null;
  5755.                     break;
  5756.             }
  5757.             return strRetVal;
  5758.         } 
  5759.         catch(e) 
  5760.         {
  5761.             return null;
  5762.         }
  5763.     },
  5764.     
  5765.     SetPref : function(strName, strValue) 
  5766.     {
  5767.         if(strValue == null) 
  5768.         {
  5769.             this.SetPref(strName,"");
  5770.             this.PREFERENCE_SERVICE.clearUserPref(strName);
  5771.             return true;
  5772.         }
  5773.         switch(typeof strValue) 
  5774.         {
  5775.             case 'boolean':
  5776.                 this.PREFERENCE_SERVICE.setBoolPref(strName, strValue);
  5777.                 break;
  5778.             case 'number':
  5779.                 this.PREFERENCE_SERVICE.setIntPref(strName, strValue);
  5780.                 break;
  5781.             case 'string':
  5782.                 this.PREFERENCE_SERVICE.setCharPref(strName, strValue);
  5783.                 break;
  5784.             default:
  5785.                 try 
  5786.                 {
  5787.                     var str = strValue.toString();
  5788.                     this.PREFERENCE_SERVICE.setCharPref(strName, str);
  5789.                 } catch(e) 
  5790.                 {
  5791.                     return false;
  5792.                 }
  5793.                 break;
  5794.         }
  5795.         return true;
  5796.     },
  5797.     
  5798.     HasUserValue : function(strName)
  5799.     {
  5800.         return     this.PREFERENCE_SERVICE.prefHasUserValue(strName);
  5801.     },
  5802.     
  5803.     DeleteBranch : function(strBranchName)
  5804.     {
  5805.         this.PREFERENCE_SERVICE.deleteBranch(strBranchName);
  5806.     }
  5807.  
  5808. }
  5809.  
  5810. var EBToolbarPreferenceManager_CT2384137 = 
  5811. {
  5812.     GetPrefixPrefName : function(isMC)
  5813.     {
  5814.         var strPrefixPrefName = EBGlobalConsts_CT2384137.ToolbarCTID + '.';
  5815.         if(isMC == true && !EBMCManager_CT2384137.IsSelectedOriginalCommunity())
  5816.         {
  5817.             strPrefixPrefName += this.AddMCPrefix();
  5818.         }
  5819.         return strPrefixPrefName;
  5820.     },
  5821.     
  5822.     AddMCPrefix : function()
  5823.     {
  5824.         return EBMCManager_CT2384137.GetSelectedCTID() + ".";
  5825.     },
  5826.     
  5827.     GetPref : function(strName,isMC) 
  5828.     {
  5829.         var strPrefixPrefName = this.GetPrefixPrefName(isMC);
  5830.         
  5831.         var strFullPrefName = strPrefixPrefName + strName;
  5832.  
  5833.         return EBPreferenceService_CT2384137.GetPref(strFullPrefName);
  5834.     },
  5835.  
  5836.     SetPref : function(strName,strValue,isMC) 
  5837.     {
  5838.         var strPrefixPrefName = this.GetPrefixPrefName(isMC);
  5839.  
  5840.         var strFullPrefName = strPrefixPrefName + strName;
  5841.         EBPreferenceService_CT2384137.SetPref(strFullPrefName,strValue);
  5842.     },
  5843.     
  5844.     HasUserValue : function(strName,isMC)
  5845.     {
  5846.         var strPrefixPrefName = this.GetPrefixPrefName(isMC);
  5847.         
  5848.         var strFullPrefName = strPrefixPrefName + strName;
  5849.         return     EBPreferenceService_CT2384137.HasUserValue(strFullPrefName);
  5850.     },
  5851.     
  5852.     ClearAll : function()
  5853.     {
  5854.         EBPreferenceService_CT2384137.DeleteBranch(EBGlobalConsts_CT2384137.ToolbarCTID);
  5855.     }
  5856. }
  5857.  
  5858. var EBCommunityPreferenceManager_CT2384137 =
  5859. {    
  5860.     GetPrefixPrefName : function(strCTID)
  5861.     {
  5862.         var strPrefixPrefName = EBGlobalConsts_CT2384137.ToolbarCTID + ".";
  5863.         if(strCTID != "CT2384137")
  5864.         {
  5865.             strPrefixPrefName += strCTID + ".";
  5866.         }
  5867.         return strPrefixPrefName;
  5868.     },
  5869.     
  5870.     GetPref : function(strName,strCTID) 
  5871.     {
  5872.         var strPrefixPrefName = this.GetPrefixPrefName(strCTID);
  5873.         
  5874.         var strFullPrefName = strPrefixPrefName + strName;
  5875.  
  5876.         return EBPreferenceService_CT2384137.GetPref(strFullPrefName);
  5877.     },
  5878.  
  5879.     SetPref : function(strName,strValue,strCTID) 
  5880.     {
  5881.         var strPrefixPrefName = this.GetPrefixPrefName(strCTID);
  5882.  
  5883.         var strFullPrefName = strPrefixPrefName + strName;
  5884.         EBPreferenceService_CT2384137.SetPref(strFullPrefName,strValue);
  5885.     },
  5886.     
  5887.     HasUserValue : function(strName,strCTID)
  5888.     {
  5889.         var strPrefixPrefName = this.GetPrefixPrefName(strCTID);
  5890.         
  5891.         var strFullPrefName = strPrefixPrefName + strName;
  5892.         return     EBPreferenceService_CT2384137.HasUserValue(strFullPrefName);
  5893.     },
  5894.     
  5895.     ClearAll : function()
  5896.     {
  5897.         EBPreferenceService_CT2384137.DeleteBranch(EBGlobalConsts_CT2384137.ToolbarCTID);
  5898.     }
  5899. }
  5900.  
  5901. var EBGlobalPreferenceManager_CT2384137 =
  5902. {    
  5903.     GetPrefixPrefName : function()
  5904.     {
  5905.         var strPrefixPrefName = 'CommunityToolbar.';
  5906.         return strPrefixPrefName;
  5907.     },
  5908.     
  5909.     GetPref : function(strName) 
  5910.     {
  5911.         var strPrefixPrefName = this.GetPrefixPrefName();
  5912.         
  5913.         var strFullPrefName = strPrefixPrefName + strName;
  5914.  
  5915.         return EBPreferenceService_CT2384137.GetPref(strFullPrefName);
  5916.     },
  5917.  
  5918.     SetPref : function(strName,strValue) 
  5919.     {
  5920.         var strPrefixPrefName = this.GetPrefixPrefName();
  5921.  
  5922.         var strFullPrefName = strPrefixPrefName + strName;
  5923.         EBPreferenceService_CT2384137.SetPref(strFullPrefName,strValue);
  5924.     },
  5925.     
  5926.     HasUserValue : function(strName)
  5927.     {
  5928.         var strPrefixPrefName = this.GetPrefixPrefName();
  5929.         
  5930.         var strFullPrefName = strPrefixPrefName + strName;
  5931.         return     EBPreferenceService_CT2384137.HasUserValue(strFullPrefName);
  5932.     },
  5933.     
  5934.     
  5935.     ClearAll : function()
  5936.     {
  5937.         EBPreferenceService_CT2384137.DeleteBranch(this.GetPrefixPrefName());
  5938.     }
  5939. }
  5940.  
  5941.  
  5942.  
  5943. var EBAboutDialogManager_CT2384137 =
  5944. {
  5945.     PrivacyUrl: 'http://www.conduit.com/privacy/ConduitPrivacy.aspx',
  5946.     mainWindow: null,
  5947.  
  5948.     Privacy_Onclick: function() {
  5949.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  5950.         var strPrivacy = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.AboutPrivacyUrl, true);
  5951.  
  5952.         if (!strPrivacy)
  5953.             strPrivacy = this.PrivacyUrl;
  5954.  
  5955.         oWindow.EBWeb_CT2384137.LoadURLInNewTab(strPrivacy);
  5956.         window.close();
  5957.     },
  5958.  
  5959.     OnLoadAboutDialog: function() {
  5960.         this.mainWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  5961.  
  5962.         var strVersion = EBGlobalConsts_CT2384137.ToolbarVersion;
  5963.         var strUserID = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.UserID);
  5964.         var strCTID = EBActionManager_CT2384137.GetCTID();
  5965.         document.getElementById("ebAboutDialog").title = "test";
  5966.         window.document.title = this.mainWindow.EBActionManager_CT2384137.GetToolbarName() + " Toolbar";
  5967.         document.getElementById('lblVersion').setAttribute('value', strVersion);
  5968.         document.getElementById('lblUID').setAttribute('value', strUserID);
  5969.         document.getElementById('lblCTID').setAttribute('value', strCTID);
  5970.  
  5971.         if (!this.mainWindow.oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.displayTrusteSeal)
  5972.             document.getElementById('imgTruste').style.display = 'none';
  5973.     },
  5974.  
  5975.     onClickCTID: function(obj) {
  5976.         obj.style.backgroundColor = 'rgb(51,153,255)';
  5977.         obj.style.color = 'white';
  5978.         EBGlobalManager_CT2384137.copyToClipboard(obj.value);
  5979.     },
  5980.  
  5981.     onBlurCTID: function(obj, e) {
  5982.         if (e.target.id == 'lblCTID') return;
  5983.         obj.style.backgroundColor = '';
  5984.         obj.style.color = '';
  5985.     },
  5986.  
  5987.     onClickTruste: function() {
  5988.         var trusteUrl = this.mainWindow.EBActionManager_CT2384137.GetTrusteLinkUrl();
  5989.         this.mainWindow.EBLinkManager_CT2384137.LoadLinkURL(null, trusteUrl, 'BLANK', null, null);
  5990.     }
  5991. }
  5992.  
  5993.  
  5994. /********************************************/
  5995. /*        Copyright 2006 Conduit Ltd.            */
  5996. /*           All Rights Reserved.           */
  5997. /********************************************/
  5998.  
  5999. //global functions related to the toolbar
  6000. var EBActionManager_CT2384137 =
  6001. {
  6002.     //get toolbar age in days for usage
  6003.     GetToolbarAgeInDays: function() {
  6004.         var stringToTimestamp = function(strServerDate) {
  6005.             if (!strServerDate) return null;
  6006.             var arrDate = strServerDate.split("-");
  6007.             if (arrDate.length != 3) return null;
  6008.  
  6009.             var oDate = new Date();
  6010.             oDate.setDate(arrDate[0]);
  6011.             oDate.setMonth(parseInt(arrDate[1]) - 1);
  6012.             oDate.setFullYear(arrDate[2]);
  6013.             var iTimestamp = Date.parse(oDate.toDateString());
  6014.             return isNaN(iTimestamp) ? null : iTimestamp;
  6015.         };
  6016.  
  6017.         var strCreatedDate = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.FirstServerDate);
  6018.         var iCreatedDate = stringToTimestamp(strCreatedDate);
  6019.         if (!iCreatedDate) return -1;
  6020.  
  6021.         var strCurrentDate = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.CurrentServerDate);
  6022.         var iCurrentDate = stringToTimestamp(strCurrentDate);
  6023.         if (!iCurrentDate) return -1;
  6024.  
  6025.         var iMilliseconds = iCurrentDate - iCreatedDate;
  6026.         var iDays = parseInt(iMilliseconds / (1000 * 60 * 60 * 24));
  6027.         return (isNaN(iDays)) ? -1 : iDays;
  6028.     },
  6029.  
  6030.     //reset this setting when switching toolbars.
  6031.     ResetToolbarInfo: function() {
  6032.         EBEMailNotifierManager_CT2384137.Reset();
  6033.     },
  6034.  
  6035.     //0 - shrink mode ,1 - unshrink mode
  6036.     ToolbarShrink: function(isShrinked) {
  6037.         var iPrefState;
  6038.         //get
  6039.         if (typeof value == "undefined") {
  6040.             iPrefState = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.ToolbarShrink);
  6041.             return iPrefState == 0 ? true : false;
  6042.         }
  6043.         //set
  6044.         else {
  6045.             iPrefState = (value) ? 0 : 1;
  6046.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.ToolbarShrink, iPrefState);
  6047.         }
  6048.     },
  6049.  
  6050.     GetTrusteLinkUrl: function() {
  6051.         var strPrefValue = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.TrusteLinkUrl);
  6052.         return (strPrefValue) ? strPrefValue : EBGlobalConsts_CT2384137.TrusteUrl;
  6053.     },
  6054.  
  6055.     ConvertAliasesUrl: function(strUrl, isFor404Url, bDontReplaceUntrusted) {
  6056.         if (typeof isFor404Url == "undefined") isFor404Url = false;
  6057.         if (typeof bDontReplaceUntrusted == "undefined") bDontReplaceUntrusted = false;
  6058.  
  6059.         var strCurrentUrl = EBUrl_CT2384137.GetPageUrl();
  6060.         var strToolbarCTID = this.GetCTID();
  6061.         var strUserID = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.UserID);
  6062.         var strToolbarVersion = EBGlobalConsts_CT2384137.ToolbarVersion;
  6063.         var strOriginalCTID = EBGlobalConsts_CT2384137.ToolbarCTID;
  6064.         var strPageTitle = this.GetPageTitle();
  6065.         var strSubDomain = EBUrl_CT2384137.GetSubDomain(this.GetWebServerURL(""));
  6066.  
  6067.         if (strUserID == null) strUserID = "";
  6068.  
  6069.         //replace the aliases
  6070.         if (!isFor404Url && !bDontReplaceUntrusted)
  6071.             strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.MainFrameURL, encodeURIComponent(strCurrentUrl));
  6072.         else if (!isFor404Url && bDontReplaceUntrusted)
  6073.             strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.MainFrameURL, "");
  6074.  
  6075.         if (!bDontReplaceUntrusted) {
  6076.             strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.UserID, strUserID);
  6077.             var oSearchBoxComp = EBComponentsManager_CT2384137.GetSearchBoxComponent();
  6078.             if (oSearchBoxComp)
  6079.                 strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.SearchTerm, oSearchBoxComp.xulMenuList.value);
  6080.             strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.MainFrameTitle, encodeURIComponent(strPageTitle));
  6081.         }
  6082.         else {
  6083.             strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.UserID, "");
  6084.             strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.SearchTerm, "");
  6085.             strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.MainFrameTitle, "");
  6086.         }
  6087.  
  6088.         strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.ToolbarID, strToolbarCTID);
  6089.         strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.ToolbarID, strToolbarCTID);
  6090.         strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.ToolbarVersion, strToolbarVersion);
  6091.         strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.ToolbarOriginalID, strOriginalCTID);
  6092.         strUrl = strUrl.replace(EBGlobalConsts_CT2384137.Aliases.ToolbarSubDomain, strSubDomain);
  6093.  
  6094.         //replace aliases with global keys
  6095.         if (strUrl.indexOf("@@@") != -1) {
  6096.             strUrl = strUrl.replace(/@@@(.*?)@@@/g, function(full, val) {
  6097.                 var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(null, val);
  6098.                 if (EBToolbarPreferenceManager_CT2384137.HasUserValue(strFullPreferencePath)) {
  6099.                     var value = EBToolbarPreferenceManager_CT2384137.GetPref(strFullPreferencePath);
  6100.                     return (value) ? EBEncryption_CT2384137.decodeHex(value) : "";
  6101.                 }
  6102.                 else
  6103.                     return "";
  6104.             });
  6105.         }
  6106.         return strUrl;
  6107.     },
  6108.  
  6109.     GetPageTitle: function() {
  6110.         var strTitle = "";
  6111.         if (typeof gBrowser != "undefined")
  6112.             strTitle = gBrowser.contentDocument.title;
  6113.  
  6114.         return strTitle;
  6115.     },
  6116.  
  6117.     SetToolbarSearchTerm: function(strSearchTerm) {
  6118.         var oSearchComponent = EBComponentsManager_CT2384137.GetSearchBoxComponent();
  6119.  
  6120.         if (oSearchComponent) {
  6121.             var bIsChanged = oSearchComponent.setSearchTerm(strSearchTerm);
  6122.  
  6123.             if (bIsChanged) {
  6124.                 this.SearchTermChanged();
  6125.             }
  6126.         }
  6127.     },
  6128.  
  6129.     IsToolbarRTL: function() {
  6130.         var xulToolbarElement = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarInstance;
  6131.         var strToolbarDirection = document.defaultView.getComputedStyle(xulToolbarElement, null).getPropertyValue("direction");
  6132.         return strToolbarDirection == 'rtl' ? true : false;
  6133.     },
  6134.  
  6135.     IsToolbarGeneric: function() {
  6136.         var strToolbarType = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.ToolbarType);
  6137.         //return strToolbarType == 'generic' ? true : false;
  6138.         return false;
  6139.  
  6140.     },
  6141.  
  6142.     IsToolbarMC: function() {
  6143.         var bIsInRegistry = EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.IsMulticommunity);
  6144.         if (bIsInRegistry)
  6145.             return EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.IsMulticommunity);
  6146.         else {
  6147.             var bValue = EBGlobalConsts_CT2384137.MultiCommunity;
  6148.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.IsMulticommunity, bValue);
  6149.             return bValue;
  6150.         }
  6151.     },
  6152.  
  6153.     IsToolbarGrouping: function() {
  6154.         var bIsInRegistry = EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.IsGrouping);
  6155.         if (bIsInRegistry) {
  6156.             return EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.IsGrouping);
  6157.         }
  6158.         else {
  6159.             var bValue = EBGlobalConsts_CT2384137.Grouping;
  6160.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.IsGrouping, bValue);
  6161.             return bValue;
  6162.         }
  6163.     },
  6164.  
  6165.     IsToolbarShown: function() {
  6166.         //toolbox is not visible
  6167.         var oToolbar = document.getElementById("iobitcom");
  6168.         var vis = document.defaultView.getComputedStyle(oToolbar, null).getPropertyValue("display");
  6169.         if (vis == "none") return false;
  6170.  
  6171.         var bRetVal = false;
  6172.         if (oToolbar) {
  6173.             var strCollapsed = oToolbar.getAttribute('collapsed');
  6174.             //check that the toolbar is not hidden
  6175.             if (!strCollapsed || strCollapsed.toLowerCase() != 'true') {
  6176.                 bRetVal = true;
  6177.             }
  6178.         }
  6179.         return bRetVal;
  6180.     },
  6181.  
  6182.     GetToolbarChevron: function() {
  6183.         var strChevronID = EBChevronManager_CT2384137.GetToolbarChveronID();
  6184.         var oChevron = document.getElementById(strChevronID);
  6185.  
  6186.         return oChevron;
  6187.     },
  6188.  
  6189.     GetWebServerURL: function(strAddition) {
  6190.         var strGeneralInfoWebServerURL = oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.webServerUrl;
  6191.  
  6192.         if (strGeneralInfoWebServerURL) {
  6193.             return strGeneralInfoWebServerURL + strAddition;
  6194.         }
  6195.         else {
  6196.             if (strAddition.charAt(strAddition.length - 1) == '/') {
  6197.                 strAddition += '?';
  6198.             }
  6199.             else {
  6200.                 strAddition += '&';
  6201.             }
  6202.             return EBGlobalConsts_CT2384137.DefaultWebServerURL + strAddition + 'ToolbarId=CT2384137';
  6203.         }
  6204.     },
  6205.  
  6206.     //get ctid from the prefs and if there isn't so from the hard-coded(means it's the original toolbar)
  6207.     GetCTID: function() {
  6208.         var strCTID = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.CTID);
  6209.         strCTID = strCTID ? strCTID : EBGlobalConsts_CT2384137.ToolbarCTID;
  6210.  
  6211.         return strCTID;
  6212.     },
  6213.  
  6214.     GetToolbarName: function() {
  6215.         var strName = oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.toolbarName;
  6216.         strName = (strName) ? strName : EBGlobalConsts_CT2384137.ToolbarName;
  6217.         return strName;
  6218.     },
  6219.  
  6220.     DocumentComplete: function() {
  6221.         //check for highlighting when the page is loaded!
  6222.         if (EBToolbarManager_CT2384137.dataToolbarObject.IsHighlighting) {
  6223.             EBHighlighterManager_CT2384137.Highlight();
  6224.         }
  6225.     },
  6226.  
  6227.     SearchTermChanged: function() {
  6228.         var XULSearchBoxMenuList = EBComponentsManager_CT2384137.GetSearchBoxMenuList();
  6229.  
  6230.         if (XULSearchBoxMenuList) {
  6231.             var strSearchTerm = XULSearchBoxMenuList.value;
  6232.  
  6233.             //set the finder highlight buttons
  6234.             EBHighlighterManager_CT2384137.SetHighlightButtons(XULSearchBoxMenuList);
  6235.  
  6236.  
  6237.             EBSearchBoxManager_CT2384137.IsSetSearchBGText = false;
  6238.  
  6239.             EBObserversManager_CT2384137.NotifyCustomObserver(EBObserversManager_CT2384137.GetSubject(gBrowser.ebWindowId_CT2384137),
  6240.                                                             EBObserversManager_CT2384137.ToolbarEventsTopic,
  6241.                                                             EBObserversManager_CT2384137.ToolbarEventsData.SearchTermChanged);
  6242.         }
  6243.     },
  6244.  
  6245.     GetEBToolbarsCTID: function() {
  6246.         var arrCTID = new Array();
  6247.         var objToolbarbox = document.getElementById('navigator-toolbox');
  6248.  
  6249.         var objToolbars = objToolbarbox.getElementsByTagName('toolbar');
  6250.         var objToolbar = null;
  6251.         var strCTIDAttributeName = 'ebtoolbarctid';
  6252.         var strCTIDAttributeValue = '';
  6253.         var strOriginalCTID = '';
  6254.         var strCurrentCTID = '';
  6255.         var obj = null;
  6256.  
  6257.         for (var i = 0; i < objToolbars.length; i++) {
  6258.             objToolbar = objToolbars[i];
  6259.             strCTIDAttributeValue = objToolbar.getAttribute(strCTIDAttributeName);
  6260.             if (strCTIDAttributeValue) {
  6261.                 strOriginalCTID = strCTIDAttributeValue;
  6262.                 strCurrentCTID = this.GetOtherToolbarCurrentCTID(strOriginalCTID);
  6263.                 obj = new Object();
  6264.                 obj.originalCTID = strOriginalCTID;
  6265.                 obj.currentCTID = strCurrentCTID;
  6266.                 arrCTID.push(obj);
  6267.             }
  6268.         }
  6269.  
  6270.         return arrCTID;
  6271.     },
  6272.  
  6273.     GetOtherToolbarCurrentCTID: function(strOriginalCTID) {
  6274.         var strPref = strOriginalCTID + "." + EBPreferenceConsts_CT2384137.CTID;
  6275.         var currentCTID = EBPreferenceService_CT2384137.GetPref(strPref);
  6276.         return currentCTID;
  6277.     },
  6278.  
  6279.     GetToolbarDialogOpeningCoordinates: function(oElement, iDialogWidth) {
  6280.         var oElementBoxObject = oElement.boxObject;
  6281.         var iElementScreenX = oElementBoxObject.screenX;
  6282.  
  6283.         //get the y position from the toolbar
  6284.         var oToolbar = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarInstance;
  6285.         var oToolbarBoxObject = oToolbar.boxObject;
  6286.         var iToolbarScreenY = oToolbarBoxObject.screenY;
  6287.         var iToolbarHeight = oToolbarBoxObject.height;
  6288.  
  6289.         var iX = iElementScreenX;
  6290.         var iY = iToolbarScreenY + iToolbarHeight;
  6291.         //in mac the y is different:
  6292.         if (EBGlobalManager_CT2384137.IsMacintoshPlatform()) {
  6293.             iY = iToolbarScreenY;
  6294.         }
  6295.  
  6296.         var iHorizontalGap = EBGlobalConsts_CT2384137.ToolbarHorizontalDialogGap;
  6297.         //validate the x coordinate according to the screen:
  6298.         if (iX + iDialogWidth > screen.availWidth && iElementScreenX < screen.availWidth) {
  6299.             iX = screen.availWidth - iDialogWidth - iHorizontalGap;
  6300.         }
  6301.         else if (iX < 0) {
  6302.             iX = iHorizontalGap;
  6303.         }
  6304.  
  6305.         return { X: iX, Y: iY };
  6306.     },
  6307.  
  6308.     GetItemDialogOpeningCoordintates: function(oElement, iDialogWidth, iDialogHeight) {
  6309.         var oElementBoxObject = oElement.boxObject;
  6310.         var iElementScreenX = oElementBoxObject.screenX;
  6311.         var iElementScreenY = oElementBoxObject.screenY;
  6312.         var iX;
  6313.         if (EBGlobalManager_CT2384137.IsToolbarRTL()) {
  6314.             iX = iElementScreenX - iDialogWidth;
  6315.         }
  6316.         else {
  6317.             iX = iElementScreenX + oElementBoxObject.width;
  6318.         }
  6319.         var iY = iElementScreenY;
  6320.  
  6321.  
  6322.         var iHorizontalGap = EBGlobalConsts_CT2384137.ToolbarHorizontalDialogGap;
  6323.         var iVerticalGap = EBGlobalConsts_CT2384137.ToolbarVerticalDialogGap;
  6324.  
  6325.         if (iX + iDialogWidth > screen.width) {
  6326.             iX = iElementScreenX - iDialogWidth;
  6327.         }
  6328.         else if (iX < 0) {
  6329.             if (EBGlobalManager_CT2384137.IsToolbarRTL()) {
  6330.                 iX = iElementScreenX + oElementBoxObject.width;
  6331.             }
  6332.             else {
  6333.                 iX = iHorizontalGap;
  6334.             }
  6335.         }
  6336.  
  6337.         if (iY + iDialogHeight > screen.height) {
  6338.             iY = screen.height - iDialogHeight - iVerticalGap;
  6339.         }
  6340.  
  6341.         return { X: iX, Y: iY };
  6342.     },
  6343.  
  6344.     //close all the special dialogs of the toolbar (weather-feed-multifeed)
  6345.     CloseToolbarDialogs: function() {
  6346.         var oWeatherDialog = EBWeatherDialogManager_CT2384137.GetDialog();
  6347.         if (oWeatherDialog)
  6348.             oWeatherDialog.close();
  6349.     },
  6350.  
  6351.     AmILatestToolbarVersion: function() {
  6352.         var arrToolbars = this.GetEBToolbarsCTID();
  6353.         var strToolbarVersion = "";
  6354.         var maxVersion = EBGlobalConsts_CT2384137.ToolbarVersion;
  6355.         var maxVersionCTID = EBGlobalConsts_CT2384137.ToolbarCTID;
  6356.         for (var i = 0; i < arrToolbars.length; i++) {
  6357.             strToolbarVersion = "0.0.0.0";
  6358.             var thatGlobalConsts = window["EBGlobalConsts_" + arrToolbars[i].originalCTID];
  6359.             if (thatGlobalConsts)
  6360.                 strToolbarVersion = thatGlobalConsts.ToolbarVersion;
  6361.  
  6362.             if (this.IsBiggerVersion(strToolbarVersion, maxVersion)) {
  6363.                 maxVersion = strToolbarVersion;
  6364.                 maxVersionCTID = arrToolbars[i].originalCTID;
  6365.             }
  6366.         }
  6367.  
  6368.         if (maxVersionCTID == EBGlobalConsts_CT2384137.ToolbarCTID)
  6369.             EBToolbarApiManager_CT2384137.IsCheckPage = true;
  6370.     },
  6371.  
  6372.     IsBiggerVersion: function(strNew, strMax) {
  6373.         return EBGlobalManager_CT2384137.compareVersions(strNew, strMax) > 0;
  6374.     },
  6375.  
  6376.     OpenEULA: function(strTarget, strUrl) {
  6377.         if (!strUrl)
  6378.             strUrl = EBGlobalConsts_CT2384137.WebServerUrl + "EULA";
  6379.         else {
  6380.             strUrl = EBUrl_CT2384137.AddHTTPProtocol(strUrl);
  6381.             strUrl += "/EULA";
  6382.         }
  6383.  
  6384.         this._openUrlWindow(strTarget, strUrl);
  6385.     },
  6386.  
  6387.     OpenPrivacyPolicy: function(strTarget, strUrl) {
  6388.         if (!strUrl)
  6389.             strUrl = EBGlobalConsts_CT2384137.WebServerUrl + "Privacy";
  6390.         else {
  6391.             strUrl = EBUrl_CT2384137.AddHTTPProtocol(strUrl);
  6392.             strUrl += "/Privacy";
  6393.         }
  6394.  
  6395.         this._openUrlWindow(strTarget, strUrl);
  6396.     },
  6397.  
  6398.     OpenLearnMore: function(strTarget, strUrl) {
  6399.         if (!strUrl)
  6400.             strUrl = EBGlobalConsts_CT2384137.WebServerUrl + "LearnMore";
  6401.         else {
  6402.             strUrl = EBUrl_CT2384137.AddHTTPProtocol(strUrl);
  6403.             strUrl += "/Tooltips/LearnMore";
  6404.         }
  6405.  
  6406.         this._openUrlWindow(strTarget, strUrl);
  6407.     },
  6408.  
  6409.     _openUrlWindow: function(strTarget, strUrl) {
  6410.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  6411.  
  6412.         if (strTarget != "DIALOG")
  6413.             oWindow.EBLinkManager_CT2384137.LoadLinkURL(null, strUrl, strTarget, null, null);
  6414.         else
  6415.             oWindow.open(strUrl, "SPECIAL_WINDOW", "toolbar=0,scrollbars=1,resizable=1,status=1");
  6416.     },
  6417.  
  6418.     SetToolbarVisible: function() {
  6419.         document.getElementById(EBGlobalConsts_CT2384137.ToolbarId).collapsed = false;
  6420.         document.persist(EBGlobalConsts_CT2384137.ToolbarId, "collapsed");
  6421.     }
  6422. }
  6423.  
  6424. function EBBaseBrowserProgressListener_CT2384137() {
  6425.     this.QueryInterface = function(aIID) {
  6426.         if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
  6427.             aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
  6428.             aIID.equals(Components.interfaces.nsISupports))
  6429.             return this;
  6430.         throw Components.results.NS_NOINTERFACE;
  6431.     };
  6432.  
  6433.     this.onLocationChange = function(aProgress, aRequest, aURI) { return 0; };
  6434.     this.onProgressChange = function() { return 0; };
  6435.     this.onStatusChange = function(aProgress, aRequest, aStatus, aMessage) { };
  6436.     this.onSecurityChange = function(aProgress, aRequest, aState) { };
  6437.     this.onLinkIconAvailable = function() { return 0; };
  6438.     this.onStateChange = function(aProgress, aRequest, aFlag, aStatus) {
  6439.         if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT) {
  6440.             var strUrl = aRequest.name;
  6441.             //navigate complete
  6442.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_START) { }
  6443.             //document complete
  6444.             if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP) { }
  6445.         }
  6446.     };
  6447. };
  6448. function EBBaseObserver_CT2384137() {
  6449.     this.Topic = "";
  6450.     var NSIObserverService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces["nsIObserverService"]);
  6451.  
  6452.     this.register = function() {
  6453.         NSIObserverService.addObserver(this, this.Topic, false);
  6454.     };
  6455.  
  6456.     this.unregister = function() {
  6457.        NSIObserverService.removeObserver(this, this.Topic);
  6458.     };
  6459.  
  6460.     this.observe = function(aSubject, aTopic, aData) {
  6461.         //Implement in inherited class
  6462.     };
  6463. };
  6464. /*************************** Special command consts ******************************/
  6465. var EBSpecialCommands_CT2384137 =
  6466. {
  6467.     //consts:
  6468.     PRIVACY_PAGE: "Privacy/",
  6469.  
  6470.     HELP_PAGE: "Help/",
  6471.  
  6472.     TELL_A_FRIEND_PAGE: "",
  6473.  
  6474.     TELLAFRIEND: function() {
  6475.         var strTellAFriendMailTo = "";
  6476.  
  6477.         if (oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.tellAfriendCmd == "") {
  6478.             //build the default tell_a_friend!
  6479.  
  6480.             //check if there is webServerUrl from the xml general info
  6481.             var strDownloadToolbarUrl = EBActionManager_CT2384137.GetWebServerURL(this.TELL_A_FRIEND_PAGE);
  6482.             var strToolbarName = EBGlobalConsts_CT2384137.ToolbarName;
  6483.  
  6484.             var strSubject = "Try " + strToolbarName + " toolbar";
  6485.             var strBody = "Hi,%0D%0A%0D%0AI recently installed the ";
  6486.             strBody += strToolbarName;
  6487.             strBody += " toolbar and thought you might also find it interesting.%0D%0AIt has lots of useful features and seems to be well-liked ";
  6488.             strBody += "by a large number of users (including my self).%0D%0A%0D%0A";
  6489.             strBody += "To find out more about this toolbar and download it, go to: %0D%0A";
  6490.             strBody += strDownloadToolbarUrl;
  6491.             strBody += "%0D%0A%0D%0A";
  6492.  
  6493.             strTellAFriendMailTo = "mailto:?subject=" + strSubject + "&body=" + strBody;
  6494.         }
  6495.         else {
  6496.             strTellAFriendMailTo = oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.tellAfriendCmd;
  6497.         }
  6498.  
  6499.         EBLinkManager_CT2384137.LoadLinkURL(null, strTellAFriendMailTo, false, null);
  6500.     },
  6501.  
  6502.     HELP: function(event) {
  6503.         //get the correct web server url
  6504.         var strAdditional = this.HELP_PAGE + "?version=" + EBGlobalConsts_CT2384137.ToolbarVersion;
  6505.         var strURL = EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  6506.         EBLinkManager_CT2384137.LoadLinkURL(event, strURL, false, null);
  6507.     },
  6508.  
  6509.     PRIVACY: function(event) {
  6510.         //get the correct web server url
  6511.         var strAdditional = this.PRIVACY_PAGE + "?version=" + EBGlobalConsts_CT2384137.ToolbarVersion;
  6512.         var strURL = EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  6513.         EBLinkManager_CT2384137.LoadLinkURL(event, strURL, false, null);
  6514.     },
  6515.  
  6516.     HOMEPAGE: function(event) {
  6517.         var strToolbarHomePage = EBComponentsManager_CT2384137.GetMainMenuComponent().ComponentItem.link;
  6518.         EBLinkManager_CT2384137.LoadLinkURL(event, strToolbarHomePage, false, null);
  6519.     },
  6520.  
  6521.     CONTACTUS: function() {
  6522.         var strMailTo = oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.writeToUsCmd;
  6523.         if (strMailTo != "") {
  6524.             EBLinkManager_CT2384137.LoadLinkURL(null, strMailTo, false, null);
  6525.         }
  6526.     },
  6527.  
  6528.     ABOUT: function() {
  6529.         var strAboutDialogType = 'EBAboutDialog_CT2384137';
  6530.         var strAboutDialogName = 'EBAboutDialogName_CT2384137';
  6531.         var oAboutDialog = EBGlobalManager_CT2384137.GetXULWindowByTypeAndName(strAboutDialogType, strAboutDialogName);
  6532.  
  6533.         //check if the about window is open to set it to focus
  6534.         if (oAboutDialog) {
  6535.             oAboutDialog.focus();
  6536.         }
  6537.         else {
  6538.             var strAboutChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + 'about.xul';
  6539.  
  6540.             window.openDialog(strAboutChromePath,
  6541.                                 strAboutDialogName,
  6542.                                 'chrome,modal,centerscreen,chrome,resizable=no');
  6543.         }
  6544.     },
  6545.  
  6546.     CLEAN_CACHE: function() {
  6547.         var title = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PRIVACY_COMP_TITLE');
  6548.         var message = oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_POPUP_BLOCKER_CLEAR_CASHE_APPROVAL_MSGBOX");
  6549.         if(EBGlobalManager_CT2384137.Confirm(window , title , message)){    
  6550.             var cacheService = Components.classes["@mozilla.org/network/cache-service;1"].
  6551.                                             getService(Components.interfaces.nsICacheService);
  6552.  
  6553.             cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK);
  6554.             cacheService.evictEntries(Components.interfaces.nsICache.STORE_IN_MEMORY);
  6555.         }
  6556.     },
  6557.  
  6558.     CLEAN_HISTORY: function() {
  6559.         var title = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PRIVACY_COMP_TITLE');
  6560.         var message = oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_POPUP_BLOCKER_CLEAR_HISTORY_APPROVAL_MSGBOX");
  6561.         if(EBGlobalManager_CT2384137.Confirm(window , title , message)){
  6562.             var historyManager = Components.classes["@mozilla.org/browser/global-history;2"].
  6563.                                             getService(Components.interfaces.nsIBrowserHistory);
  6564.  
  6565.             historyManager.removeAllPages();
  6566.         }
  6567.     },
  6568.  
  6569.     CLEAR_COOKIES: function() {
  6570.         var title = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PRIVACY_COMP_TITLE');
  6571.         var message = oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_POPUP_BLOCKER_CLEAR_COOKIES_APPROVAL_MSGBOX");
  6572.         if(EBGlobalManager_CT2384137.Confirm(window , title , message)){
  6573.             var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].
  6574.                                         getService(Components.interfaces.nsICookieManager);
  6575.  
  6576.             cookieManager.removeAll();
  6577.         }
  6578.     },
  6579.  
  6580.     OnToolbarRefresh: function(isForceRefresh) {
  6581.         //clear toggle components list
  6582.         EBToggleComponentManager_CT2384137.OnToolbarRefresh();
  6583.  
  6584.         EBToolbarManager_CT2384137.onBeforeRefreshAllWindows();
  6585.  
  6586.         //Get new settings from server
  6587.         oToolbarManager_CT2384137.refresh(isForceRefresh);
  6588.     },
  6589.  
  6590.     REFRESH_TOOLBAR_VIEW: function(isForceRefresh) {
  6591.         if (typeof (isForceRefresh) == "undefined") isForceRefresh = false;
  6592.  
  6593.         EBMCManager_CT2384137.OnToolbarRefreshGrouping(false);
  6594.         EBMCManager_CT2384137.OnToolbarRefreshMulticommunitiesChanges(false);
  6595.         EBRadioManager_CT2384137.OnToolbarRefresh(false);
  6596.         EBChatStaticManager_CT2384137.OnToolbarRefresh(false);
  6597.  
  6598.         //refresh alert
  6599.         EBAlertManager_CT2384137.Refresh(false);
  6600.  
  6601.         this.OnToolbarRefresh(isForceRefresh);
  6602.     },
  6603.  
  6604.     ForceRefreshWithFlags: function(flags) {
  6605.         if (!flags || flags & EBForceRefreshFlags_CT2384137.SETTINGS) {
  6606.             EBChatStaticManager_CT2384137.OnToolbarRefresh(flags & EBForceRefreshFlags_CT2384137.CHAT || !flags);
  6607.             //force refresh is allowed only for chat in this release
  6608.             EBMCManager_CT2384137.OnToolbarRefreshGrouping(false); //flags & EBForceRefreshFlags_CT2384137.GROUPING || !flags
  6609.             EBMCManager_CT2384137.OnToolbarRefreshMulticommunitiesChanges(false); //flags & EBForceRefreshFlags_CT2384137.COMMUNITIES || !flags
  6610.             EBRadioManager_CT2384137.OnToolbarRefresh(false); //flags & EBForceRefreshFlags_CT2384137.RADIO || !flags
  6611.             this.OnToolbarRefresh(true);
  6612.         }
  6613.         //if the toolbar is not refreshed, refresh here specific components
  6614.         else {
  6615.             //force refresh is allowed only for chat in this release
  6616.             if (flags & EBForceRefreshFlags_CT2384137.CHAT)
  6617.                 EBChatStaticManager_CT2384137.ForceRefresh();
  6618.             /*
  6619.             if (flags & EBForceRefreshFlags_CT2384137.RADIO)
  6620.             EBRadioManager_CT2384137.ForceRefresh();
  6621.  
  6622.             if (flags & EBForceRefreshFlags_CT2384137.GROUPING)
  6623.             EBMCManager_CT2384137.ForceRefreshGrouping();
  6624.  
  6625.             if (flags & EBForceRefreshFlags_CT2384137.COMMUNITIES)
  6626.             EBMCManager_CT2384137.ForceRefreshMulticommunitiesChanges();
  6627.  
  6628.             if (flags & EBForceRefreshFlags_CT2384137.MY_STUFF) {
  6629.             EBMyGadgetsIO_CT2384137.InvalidateCache(true);
  6630.             //notify mystuff observer;
  6631.             }*/
  6632.         }
  6633.     },
  6634.  
  6635.     DELETE_SEARCH_HISTORY: function() {
  6636.         EBSearchBoxManager_CT2384137.ClearSearchHistoryFile();
  6637.         this.BroadcastClearHistoryFromSearchBox();
  6638.     },
  6639.  
  6640.     BroadcastClearHistoryFromSearchBox: function() {
  6641.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  6642.                     .getService(Components.interfaces.nsIWindowMediator);
  6643.  
  6644.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  6645.         while (objEnumerator.hasMoreElements()) {
  6646.             var objWindow = objEnumerator.getNext();
  6647.             try {
  6648.                 //clear history items from the history popup menu
  6649.                 if (objWindow.EBSearchBoxManager_CT2384137.ClearSearchHistory) {
  6650.                     objWindow.EBSearchBoxManager_CT2384137.ClearSearchHistory();
  6651.                 }
  6652.             }
  6653.             catch (ex) { }
  6654.         }
  6655.     },
  6656.  
  6657.     UNINSTALL: function() {
  6658.         var strUninstallMsg = EBGlobalConsts_CT2384137.ToolbarName + " toolbar will be uninstalled after you restart Firefox.";
  6659.         var isUninstall = false;
  6660.         var strGUID = EBGlobalConsts_CT2384137.GUID;
  6661.  
  6662.         try {
  6663.  
  6664.             var objExtensionsManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
  6665.  
  6666.             if (objExtensionsManager.uninstallExtension)//Firefox 1.0+
  6667.             {
  6668.                 this._dummy = objExtensionsManager.datasource;
  6669.                 objExtensionsManager.uninstallExtension(strGUID);
  6670.                 this._dummy = null;
  6671.                 isUninstall = true;
  6672.             }
  6673.             else if (objExtensionsManager.uninstallItem)//Firefox 1.5
  6674.             {
  6675.                 objExtensionsManager.uninstallItem(strGUID);
  6676.                 isUninstall = true;
  6677.             }
  6678.  
  6679.             if (isUninstall)
  6680.                 EBGlobalManager_CT2384137.Alert(window, strUninstallMsg, 'Uninstallation');
  6681.  
  6682.         } catch (err) { }
  6683.     },
  6684.  
  6685.     SHRINK_TOOLBAR: function() {
  6686.         var oTimeout = function() {
  6687.             EBActionManager_CT2384137.ToolbarShrink(true);
  6688.             EBToolbarManager_CT2384137.onShrinkUnshrinkAllWindows();
  6689.             EBRadioManager_CT2384137.OnShrink(true);
  6690.         };
  6691.         setTimeout(oTimeout, 1);
  6692.     },
  6693.  
  6694.     UNSHRINK_TOOLBAR: function() {
  6695.         var oTimeout = function() {
  6696.             EBActionManager_CT2384137.ToolbarShrink(false);
  6697.             EBRadioManager_CT2384137.OnExpand(true);
  6698.             EBToolbarManager_CT2384137.onShrinkUnshrinkAllWindows();
  6699.         };
  6700.         setTimeout(oTimeout, 1);
  6701.     },
  6702.  
  6703.     EMAIL_NOTIFIER_OPTIONS: function() {
  6704.         EBEMailNotifierDialogsManager_CT2384137.OpenSettingsDialog(window, false, "");
  6705.     },
  6706.  
  6707.     EMAIL_NOTIFIER_CHECK_NOW: function() {
  6708.         EBEMailNotifierToolbarManager_CT2384137.OnCommandCheckForNewEMailsButton();
  6709.     },
  6710.  
  6711.     OPTIONS: function() {
  6712.         EBToolbarOptionsStaticDialogManager_CT2384137.OpenDialog(window, null);
  6713.     },
  6714.  
  6715.     CALC: function() {
  6716.         EBWindows_CT2384137.WindowsShellExecute('calc.exe', null, true);
  6717.     },
  6718.  
  6719.     WINWORD: function() {
  6720.         EBWindows_CT2384137.WindowsShellExecute('winword.exe', null, true);
  6721.     },
  6722.  
  6723.     NOTEPAD: function() {
  6724.         EBWindows_CT2384137.WindowsShellExecute('notepad.exe', null, true);
  6725.     },
  6726.  
  6727.     EXCEL: function() {
  6728.         EBWindows_CT2384137.WindowsShellExecute('excel.exe', null, true);
  6729.     },
  6730.  
  6731.     PAINT: function() {
  6732.         EBWindows_CT2384137.WindowsShellExecute('mspaint.exe', null, true);
  6733.     },
  6734.  
  6735.     NETMEETING: function() {
  6736.         EBWindows_CT2384137.WindowsShellExecute('conf.exe', null, true);
  6737.     },
  6738.  
  6739.     OUTLOOK: function() {
  6740.         EBWindows_CT2384137.WindowsShellExecute('outlook.exe', null, true);
  6741.     },
  6742.  
  6743.     DIALER: function() {
  6744.         EBWindows_CT2384137.WindowsShellExecute('dialer.exe', null, true);
  6745.     },
  6746.  
  6747.     MSCONFIG: function() {
  6748.         EBWindows_CT2384137.WindowsShellExecute('msconfig.exe', null, true);
  6749.     },
  6750.  
  6751.     FRONTPAGE: function() {
  6752.         EBWindows_CT2384137.WindowsShellExecute('frontpg.exe', null, true);
  6753.     },
  6754.  
  6755.     HELPCENTER: function() {
  6756.         EBWindows_CT2384137.WindowsShellExecute('helpctr.exe', null, true);
  6757.     },
  6758.  
  6759.     HYPERTERMINAL: function() {
  6760.         EBWindows_CT2384137.WindowsShellExecute('hypertrm.exe', null, true);
  6761.     },
  6762.  
  6763.     MSMOVIEMAKER: function() {
  6764.         EBWindows_CT2384137.WindowsShellExecute('moviemk.exe', null, true);
  6765.     },
  6766.  
  6767.     FILETRANSFERWIZARD: function() {
  6768.         EBWindows_CT2384137.WindowsShellExecute('migwiz.exe', null, true);
  6769.     },
  6770.  
  6771.     MSACCESS: function() {
  6772.         EBWindows_CT2384137.WindowsShellExecute('msaccess.exe', null, true);
  6773.     },
  6774.  
  6775.     MSDEV: function() {
  6776.         EBWindows_CT2384137.WindowsShellExecute('msdev.exe', null, true);
  6777.     },
  6778.  
  6779.     OUTLOOKEXPRESS: function() {
  6780.         EBWindows_CT2384137.WindowsShellExecute('msimn.exe', null, true);
  6781.     },
  6782.  
  6783.     MSINFO32: function() {
  6784.         EBWindows_CT2384137.WindowsShellExecute('msinfo32.exe', null, true);
  6785.     },
  6786.  
  6787.     MSNMESSENGER: function() {
  6788.         EBWindows_CT2384137.WindowsShellExecute('msnmsgr.exe', null, true);
  6789.     },
  6790.  
  6791.     WINZIP: function() {
  6792.         EBWindows_CT2384137.WindowsShellExecute('winzip.exe', null, true);
  6793.     },
  6794.  
  6795.     WORDPAD: function() {
  6796.         EBWindows_CT2384137.WindowsShellExecute('wordpad.exe', null, true);
  6797.     },
  6798.  
  6799.     WMPLAYER: function() {
  6800.         EBWindows_CT2384137.WindowsShellExecute('wmplayer.exe', null, true);
  6801.     },
  6802.  
  6803.     IIS: function() {
  6804.         EBWindows_CT2384137.WindowsShellExecute('inetmgr.exe', null, true);
  6805.     },
  6806.  
  6807.     PHOTOSHOP: function() {
  6808.         EBWindows_CT2384137.WindowsShellExecute('photoshop.exe', null, true);
  6809.     },
  6810.  
  6811.     POWERPOINT: function() {
  6812.         EBWindows_CT2384137.WindowsShellExecute('powerpnt.exe', null, true);
  6813.     },
  6814.  
  6815.     QUICKTIMEPLAYER: function() {
  6816.         EBWindows_CT2384137.WindowsShellExecute('quicktimeplayer.exe', null, true);
  6817.     },
  6818.  
  6819.     REGISTRYEDITOR: function() {
  6820.         EBWindows_CT2384137.WindowsShellExecute('regedit.exe', null, true);
  6821.     },
  6822.  
  6823.     ActivateSpecialCommand: function(event, strCommandId) {
  6824.         strCommandId = strCommandId.toUpperCase();
  6825.  
  6826.         switch (strCommandId) {
  6827.             case "TELLAFRIEND":
  6828.                 this.TELLAFRIEND();
  6829.                 break;
  6830.             case "HELP":
  6831.                 this.HELP(event);
  6832.                 break;
  6833.             case "PRIVACY":
  6834.                 this.PRIVACY(event);
  6835.                 break;
  6836.             case "HOMEPAGE":
  6837.                 this.HOMEPAGE(event);
  6838.                 break;
  6839.             case "ABOUT":
  6840.                 this.ABOUT();
  6841.                 break;
  6842.             case "CONTACTUS":
  6843.                 this.CONTACTUS();
  6844.                 break;
  6845.             case "CLEAN_CACHE":
  6846.                 this.CLEAN_CACHE();
  6847.                 break;
  6848.             case "CLEAN_HISTORY":
  6849.                 this.CLEAN_HISTORY();
  6850.                 break;
  6851.             case "CLEAR_COOKIES":
  6852.                 this.CLEAR_COOKIES();
  6853.                 break;
  6854.             case "REFRESH_TOOLBAR_VIEW":
  6855.                 this.REFRESH_TOOLBAR_VIEW();
  6856.                 break;
  6857.             case "DELETE_SEARCH_HISTORY":
  6858.                 this.DELETE_SEARCH_HISTORY();
  6859.                 break;
  6860.             case "UNINSTALL":
  6861.                 this.UNINSTALL();
  6862.                 break;
  6863.             case "SHRINK_TOOLBAR":
  6864.                 this.SHRINK_TOOLBAR();
  6865.                 break;
  6866.             case "UNSHRINK_TOOLBAR":
  6867.                 this.UNSHRINK_TOOLBAR();
  6868.                 break;
  6869.             case "EMAIL_NOTIFIER_CHECK_NOW":
  6870.                 this.EMAIL_NOTIFIER_CHECK_NOW();
  6871.                 objUsage = null;
  6872.                 break;
  6873.             case "EMAIL_NOTIFIER_OPTIONS":
  6874.                 this.EMAIL_NOTIFIER_OPTIONS();
  6875.                 objUsage = null;
  6876.                 break;
  6877.             case "OPTIONS":
  6878.                 this.OPTIONS();
  6879.                 break;
  6880.             case 'CALC':
  6881.                 this.CALC();
  6882.                 break;
  6883.             case 'WINWORD':
  6884.                 this.WINWORD();
  6885.                 break;
  6886.             case 'NOTEPAD':
  6887.                 this.NOTEPAD();
  6888.                 break;
  6889.             case 'EXCEL':
  6890.                 this.EXCEL();
  6891.                 break;
  6892.             case 'PAINT':
  6893.                 this.PAINT();
  6894.                 break;
  6895.             case 'NETMEETING':
  6896.                 this.NETMEETING();
  6897.                 break;
  6898.             case 'OUTLOOK':
  6899.                 this.OUTLOOK();
  6900.                 break;
  6901.             case 'DIALER':
  6902.                 this.DIALER();
  6903.                 break;
  6904.             case 'MSCONFIG':
  6905.                 this.MSCONFIG();
  6906.                 break;
  6907.             case 'FRONTPAGE':
  6908.                 this.FRONTPAGE();
  6909.                 break;
  6910.             case 'HELPCENTER':
  6911.                 this.HELPCENTER();
  6912.                 break;
  6913.             case 'HYPERTERMINAL':
  6914.                 this.HYPERTERMINAL();
  6915.                 break;
  6916.             case 'MSMOVIEMAKER':
  6917.                 this.MSMOVIEMAKER();
  6918.                 break;
  6919.             case 'FILETRANSFERWIZARD':
  6920.                 this.FILETRANSFERWIZARD();
  6921.                 break;
  6922.             case 'MSACCESS':
  6923.                 this.MSACCESS();
  6924.                 break;
  6925.             case 'MSDEV':
  6926.                 this.MSDEV();
  6927.                 break;
  6928.             case 'OUTLOOKEXPRESS':
  6929.                 this.OUTLOOKEXPRESS();
  6930.                 break;
  6931.             case 'MSINFO32':
  6932.                 this.MSINFO32();
  6933.                 break;
  6934.             case 'MSNMESSENGER':
  6935.                 this.MSNMESSENGER();
  6936.                 break;
  6937.             case 'WINZIP':
  6938.                 this.WINZIP();
  6939.                 break;
  6940.             case 'WORDPAD':
  6941.                 this.WORDPAD();
  6942.                 break;
  6943.             case 'WMPLAYER':
  6944.                 this.WMPLAYER();
  6945.                 break;
  6946.             case 'IIS':
  6947.                 this.IIS();
  6948.                 break;
  6949.             case 'PHOTOSHOP':
  6950.                 this.PHOTOSHOP();
  6951.                 break;
  6952.             case 'POWERPOINT':
  6953.                 this.POWERPOINT();
  6954.                 break;
  6955.             case 'QUICKTIMEPLAYER':
  6956.                 this.QUICKTIMEPLAYER();
  6957.                 break;
  6958.             case 'REGISTRYEDITOR':
  6959.                 this.REGISTRYEDITOR();
  6960.                 break;
  6961.         }
  6962.     },
  6963.  
  6964.     IsSupportedCommand: function(strCommandId) {
  6965.         strCommandId = strCommandId.toUpperCase();
  6966.  
  6967.         switch (strCommandId) {
  6968.             case "TELLAFRIEND":
  6969.                 return true;
  6970.                 break;
  6971.             case "HELP":
  6972.                 return true;
  6973.                 break;
  6974.             case "PRIVACY":
  6975.                 return true;
  6976.                 break;
  6977.             case "HOMEPAGE":
  6978.                 return true;
  6979.                 break;
  6980.             case "ABOUT":
  6981.                 return true;
  6982.                 break;
  6983.             case "CONTACTUS":
  6984.                 return true;
  6985.                 break;
  6986.             case "CLEAN_CACHE":
  6987.                 return true;
  6988.                 break;
  6989.             case "CLEAN_HISTORY":
  6990.                 return true;
  6991.                 break;
  6992.             case "CLEAR_COOKIES":
  6993.                 return true;
  6994.                 break;
  6995.             case "REFRESH_TOOLBAR_VIEW":
  6996.                 return true;
  6997.                 break;
  6998.             case "DELETE_SEARCH_HISTORY":
  6999.                 return true;
  7000.                 break;
  7001.             case "UNINSTALL":
  7002.                 return true;
  7003.                 break;
  7004.             case "SHRINK_TOOLBAR":
  7005.                 return true;
  7006.                 break;
  7007.             case "UNSHRINK_TOOLBAR":
  7008.                 return true;
  7009.                 break;
  7010.             case "EMAIL_NOTIFIER_CHECK_NOW":
  7011.                 return true;
  7012.                 break;
  7013.             case "EMAIL_NOTIFIER_OPTIONS":
  7014.                 return true;
  7015.                 break;
  7016.             case "OPTIONS":
  7017.                 return true;
  7018.                 break;
  7019.             case "CALC":
  7020.                 //in every third component application i check if this is 
  7021.                 //windows OS and if there is this application under window!
  7022.                 if (EBWindows_CT2384137.WindowsShellExecute('calc.exe', null, false))
  7023.                     return true;
  7024.                 else
  7025.                     return false;
  7026.                 break;
  7027.             case "WINWORD":
  7028.                 if (EBWindows_CT2384137.WindowsShellExecute('winword.exe', null, false))
  7029.                     return true;
  7030.                 else
  7031.                     return false;
  7032.                 break;
  7033.             case "NOTEPAD":
  7034.                 if (EBWindows_CT2384137.WindowsShellExecute('notepad.exe', null, false))
  7035.                     return true;
  7036.                 else
  7037.                     return false;
  7038.                 break;
  7039.             case "EXCEL":
  7040.                 if (EBWindows_CT2384137.WindowsShellExecute('excel.exe', null, false))
  7041.                     return true;
  7042.                 else
  7043.                     return false;
  7044.                 break;
  7045.             case "PAINT":
  7046.                 if (EBWindows_CT2384137.WindowsShellExecute('mspaint.exe', null, false))
  7047.                     return true;
  7048.                 else
  7049.                     return false;
  7050.                 break;
  7051.             case "NETMEETING":
  7052.                 if (EBWindows_CT2384137.WindowsShellExecute('conf.exe', null, false))
  7053.                     return true;
  7054.                 else
  7055.                     return false;
  7056.                 break;
  7057.             case "OUTLOOK":
  7058.                 if (EBWindows_CT2384137.WindowsShellExecute('outlook.exe', null, false))
  7059.                     return true;
  7060.                 else
  7061.                     return false;
  7062.                 break;
  7063.             case "DIALER":
  7064.                 if (EBWindows_CT2384137.WindowsShellExecute('dialer.exe', null, false))
  7065.                     return true;
  7066.                 else
  7067.                     return false;
  7068.                 break;
  7069.             case "MSCONFIG":
  7070.                 if (EBWindows_CT2384137.WindowsShellExecute('msconfig.exe', null, false))
  7071.                     return true;
  7072.                 else
  7073.                     return false;
  7074.                 break;
  7075.             case "FRONTPAGE":
  7076.                 if (EBWindows_CT2384137.WindowsShellExecute('frontpg.exe', null, false))
  7077.                     return true;
  7078.                 else
  7079.                     return false;
  7080.                 break;
  7081.             case "HELPCENTER":
  7082.                 if (EBWindows_CT2384137.WindowsShellExecute('helpctr.exe', null, false))
  7083.                     return true;
  7084.                 else
  7085.                     return false;
  7086.                 break;
  7087.             case "HYPERTERMINAL":
  7088.                 if (EBWindows_CT2384137.WindowsShellExecute('hypertrm.exe', null, false))
  7089.                     return true;
  7090.                 else
  7091.                     return false;
  7092.                 break;
  7093.             case "MSMOVIEMAKER":
  7094.                 if (EBWindows_CT2384137.WindowsShellExecute('moviemk.exe', null, false))
  7095.                     return true;
  7096.                 else
  7097.                     return false;
  7098.                 break;
  7099.             case "FILETRANSFERWIZARD":
  7100.                 if (EBWindows_CT2384137.WindowsShellExecute('migwiz.exe', null, false))
  7101.                     return true;
  7102.                 else
  7103.                     return false;
  7104.                 break;
  7105.             case "MSACCESS":
  7106.                 if (EBWindows_CT2384137.WindowsShellExecute('msaccess.exe', null, false))
  7107.                     return true;
  7108.                 else
  7109.                     return false;
  7110.                 break;
  7111.             case "MSDEV":
  7112.                 if (EBWindows_CT2384137.WindowsShellExecute('msdev.exe', null, false))
  7113.                     return true;
  7114.                 else
  7115.                     return false;
  7116.                 break;
  7117.             case "OUTLOOKEXPRESS":
  7118.                 if (EBWindows_CT2384137.WindowsShellExecute('msimn.exe', null, false))
  7119.                     return true;
  7120.                 else
  7121.                     return false;
  7122.                 break;
  7123.             case "MSINFO32":
  7124.                 if (EBWindows_CT2384137.WindowsShellExecute('msinfo32.exe', null, false))
  7125.                     return true;
  7126.                 else
  7127.                     return false;
  7128.                 break;
  7129.             case "MSNMESSENGER":
  7130.                 if (EBWindows_CT2384137.WindowsShellExecute('msnmsgr.exe', null, false))
  7131.                     return true;
  7132.                 else
  7133.                     return false;
  7134.                 break;
  7135.             case "WINZIP":
  7136.                 if (EBWindows_CT2384137.WindowsShellExecute('winzip.exe', null, false))
  7137.                     return true;
  7138.                 else
  7139.                     return false;
  7140.                 break;
  7141.             case "WORDPAD":
  7142.                 if (EBWindows_CT2384137.WindowsShellExecute('wordpad.exe', null, false))
  7143.                     return true;
  7144.                 else
  7145.                     return false;
  7146.                 break;
  7147.             case "WMPLAYER":
  7148.                 if (EBWindows_CT2384137.WindowsShellExecute('wmplayer.exe', null, false))
  7149.                     return true;
  7150.                 else
  7151.                     return false;
  7152.                 break;
  7153.             case "IIS":
  7154.                 if (EBWindows_CT2384137.WindowsShellExecute('inetmgr.exe', null, false))
  7155.                     return true;
  7156.                 else
  7157.                     return false;
  7158.                 break;
  7159.             case "PHOTOSHOP":
  7160.                 if (EBWindows_CT2384137.WindowsShellExecute('photoshop.exe', null, false))
  7161.                     return true;
  7162.                 else
  7163.                     return false;
  7164.                 break;
  7165.             case "POWERPOINT":
  7166.                 if (EBWindows_CT2384137.WindowsShellExecute('powerpnt.exe', null, false))
  7167.                     return true;
  7168.                 else
  7169.                     return false;
  7170.                 break;
  7171.             case "QUICKTIMEPLAYER":
  7172.                 if (EBWindows_CT2384137.WindowsShellExecute('quicktimeplayer.exe', null, false))
  7173.                     return true;
  7174.                 else
  7175.                     return false;
  7176.                 break;
  7177.             case "REGISTRYEDITOR":
  7178.                 if (EBWindows_CT2384137.WindowsShellExecute('regedit.exe', null, false))
  7179.                     return true;
  7180.                 else
  7181.                     return false;
  7182.                 break;
  7183.         }
  7184.  
  7185.         return false;
  7186.     }
  7187. }
  7188.  
  7189.  
  7190. var EBComponentsConsts_CT2384137 =
  7191. {
  7192.     TRUE: 'TRUE',
  7193.     FALSE: 'FALSE',
  7194.     TooltipPrefix: 'EBTooltip_',
  7195.     ToolbarButtonIDPrefix: 'EBToolbarButton_',
  7196.     MainPopupSetID: 'EBMainPopupSet_CT2384137',
  7197.     DontChangeTerm: 'EB_DONT_CHANGE_TERM',
  7198.     EMailNotifierNewID: 'EBEmailNotifierNewBrowserHelperObject',
  7199.  
  7200.     Editable:
  7201.     {
  7202.         FULL: 'FULL',
  7203.         NONE: 'NONE'
  7204.     },
  7205.  
  7206.     //components type to distinguish between The different type of components
  7207.     //components coming from the original settings request,components coming from the third party components request, etc..
  7208.     ComponentsType:
  7209.     {
  7210.         Settings: 'Settings',
  7211.         ThirdParty: 'ThirdParty',
  7212.         UserAdded: 'UserAdded',
  7213.         UserFavorites: 'UserFavorites'
  7214.     },
  7215.  
  7216.     Caption:
  7217.     {
  7218.         Loading: 'Loading...',
  7219.         New: 'new',
  7220.         EmailFailed: 'Failed',
  7221.         Unread: 'unread'
  7222.     }
  7223. };
  7224.  
  7225.  
  7226. var EBComponentsManager_CT2384137 =
  7227. {
  7228.     ValidateComponentID: function(strCompID) {
  7229.         var strValidateCompID = strCompID;
  7230.         if (!strValidateCompID)
  7231.             strValidateCompID = EBGlobalManager_CT2384137.GenerateRandomNumber();
  7232.  
  7233.         return strValidateCompID;
  7234.     },
  7235.  
  7236.     IsEditableComponent: function(objToolbarComponent) {
  7237.         var strPermission = objToolbarComponent.ComponentItem.Permission;
  7238.         return (strPermission.toUpperCase() != EBComponentsConsts_CT2384137.Editable.NONE)
  7239.     },
  7240.  
  7241.     GetComponentByCompID: function(strCompID) {
  7242.         var oComponent = null;
  7243.         if (EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents.Contains(strCompID))
  7244.             oComponent = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents.GetByID(strCompID);
  7245.         else if (EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents.Contains(strCompID))
  7246.             oComponent = EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents.GetByID(strCompID);
  7247.  
  7248.         return oComponent;
  7249.     },
  7250.  
  7251.     GetMainMenuComponent: function() {
  7252.         var strMainMenuCompID = oToolbarManager_CT2384137.getToolbarData().componentsIds.MainMenu;
  7253.         var oMainMenuComponent = this.GetComponentByCompID(strMainMenuCompID);
  7254.         return oMainMenuComponent;
  7255.     },
  7256.  
  7257.     GetSearchBoxComponent: function() {
  7258.         var strSearchBoxCompID = oToolbarManager_CT2384137.getToolbarData().componentsIds.SearchBox;
  7259.         var objSearchBoxComponent = this.GetComponentByCompID(strSearchBoxCompID);
  7260.         return objSearchBoxComponent;
  7261.     },
  7262.  
  7263.     GetEMailNotifierComponent: function() {
  7264.         var strEMailNotifierCompID = oToolbarManager_CT2384137.getToolbarData().componentsIds.EMailNotifier;
  7265.         var objEMailNotifierComponent = this.GetComponentByCompID(strEMailNotifierCompID);
  7266.         return objEMailNotifierComponent;
  7267.     },
  7268.  
  7269.     GetEMailNotifierToolbarButton: function() {
  7270.         var oXULToolbarButton = null;
  7271.         var oEMailNotifierComponent = this.GetEMailNotifierComponent();
  7272.         if (oEMailNotifierComponent)
  7273.             oXULToolbarButton = oEMailNotifierComponent.XULElement;
  7274.  
  7275.         return oXULToolbarButton;
  7276.     },
  7277.  
  7278.     GetWeatherComponent: function() {
  7279.         var strWeatherCompID = oToolbarManager_CT2384137.getToolbarData().componentsIds.Weather;
  7280.         var oWeatherComponent = this.GetComponentByCompID(strWeatherCompID);
  7281.         return oWeatherComponent;
  7282.     },
  7283.  
  7284.     GetRadioComponent: function() {
  7285.         var strRadioCompID = oToolbarManager_CT2384137.getToolbarData().componentsIds.Radio;
  7286.         var oRadioComponent = this.GetComponentByCompID(strRadioCompID);
  7287.         return oRadioComponent;
  7288.     },
  7289.  
  7290.     GetMainMenuToolbarButton: function() {
  7291.         var oToolbarButton = null;
  7292.         var oMainMenuComponent = this.GetMainMenuComponent();
  7293.         if (oMainMenuComponent)
  7294.             oToolbarButton = oMainMenuComponent.XULElement;
  7295.         return oToolbarButton;
  7296.     },
  7297.  
  7298.     GetMainMenuToolbarLogo: function() {
  7299.         var strLogo = '';
  7300.         var oMainToolbarButton = this.GetMainMenuToolbarButton();
  7301.         if (oMainToolbarButton)
  7302.             strLogo = oMainToolbarButton.getAttribute('image');
  7303.         return strLogo;
  7304.     },
  7305.  
  7306.     //TODO: should be removed
  7307.     GetWeatherComponentButton: function() {
  7308.         var oWeatherComponent = this.GetWeatherComponent();
  7309.         var oXULButton = null;
  7310.         if (oWeatherComponent)
  7311.             oXULButton = oWeatherComponent.XULElement;
  7312.  
  7313.         return oXULButton;
  7314.     },
  7315.  
  7316.     GetWeatherComponentChevronElement: function() {
  7317.         var oWeatherComponent = this.GetWeatherComponent();
  7318.         var oXULChevronElement = null;
  7319.         if (oWeatherComponent)
  7320.             oXULChevronElement = oWeatherComponent.XULChevronElement;
  7321.  
  7322.         return oXULChevronElement;
  7323.     },
  7324.  
  7325.     //TODO: should be removed
  7326.     GetSearchBoxMenuList: function() {
  7327.         var XULSearchMenuList = null;
  7328.         var objSearchBoxComponent = this.GetSearchBoxComponent();
  7329.  
  7330.         if (objSearchBoxComponent)
  7331.             XULSearchMenuList = objSearchBoxComponent.xulMenuList;
  7332.  
  7333.         return XULSearchMenuList;
  7334.     },
  7335.  
  7336.     GetAllDynamicMenuComponents: function() {
  7337.         if (!EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents)
  7338.             return null;
  7339.  
  7340.         var arrComp = new Array();
  7341.         var oComp = null;
  7342.  
  7343.         for (var i = 0; i < EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents.Count(); i++) {
  7344.             oComp = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents.GetByIndex(i);
  7345.  
  7346.             if (oComp instanceof EBDynamicMenuComponent_CT2384137 && oComp.ComponentItem.isShow())
  7347.                 arrComp.push(oComp);
  7348.         }
  7349.  
  7350.         return arrComp;
  7351.     },
  7352.  
  7353.     GetChatComponent: function() {
  7354.         if (!EBToolbarManager_CT2384137.dataToolbarObject.ToolbarComponents) return null;
  7355.  
  7356.         var oComp = null;
  7357.         var strChatCompID = oToolbarManager_CT2384137.getToolbarData().componentsIds.Chat;
  7358.         oComp = this.GetComponentByCompID(strChatCompID);
  7359.  
  7360.         if (oComp && !oComp.ComponentItem.isShow)
  7361.             return null;
  7362.         else
  7363.             return oComp;
  7364.     },
  7365.     
  7366.     GetFacebookComponent: function() {
  7367.         var strFacebookCompID = oToolbarManager_CT2384137.getToolbarData().componentsIds.Facebook;
  7368.         var objFacebookComponent = this.GetComponentByCompID(strFacebookCompID);
  7369.         return objFacebookComponent;
  7370.     },
  7371.     
  7372.     //the toolbarbutton id is for the tooltip attach for this button
  7373.     //to the tooltip-shrink effect
  7374.     GetToolbarButtonID: function(strCompID) {
  7375.         var strToolbarButtonIDPrefix = EBComponentsConsts_CT2384137.ToolbarButtonIDPrefix;
  7376.         var strToolbarButtonID = strToolbarButtonIDPrefix + strCompID + EBGlobalConsts_CT2384137.ToolbarCTID;
  7377.         return strToolbarButtonID;
  7378.     },
  7379.  
  7380.     GetTooltipID: function(strCompID) {
  7381.         var strTooltipPrefix = EBComponentsConsts_CT2384137.TooltipPrefix;
  7382.         var strTooltipID = strTooltipPrefix + strCompID + EBGlobalConsts_CT2384137.ToolbarCTID;
  7383.         return strTooltipID;
  7384.     },
  7385.  
  7386.     AddTooltip: function(strCompID, objXULToolbarButton) {
  7387.         var strMainPopupSetID = EBComponentsConsts_CT2384137.MainPopupSetID;
  7388.         var objMainPopupSet = document.getElementById(strMainPopupSetID);
  7389.  
  7390.         var strTooltipID = this.GetTooltipID(strCompID);
  7391.         var strOrient = 'vertical';
  7392.  
  7393.         //patch to 1.0.* - send the toolbarbutton id to retrieve the label and tooltip instead of
  7394.         //the toolbarbutton object itself as a param to the onpopupshowing event
  7395.         //set addEventListener also fails to work in 1.0.*
  7396.         var strToolbarButtonID = objXULToolbarButton.getAttribute('id');
  7397.         var objXULTooltip = EBXULFactory_CT2384137.CreateTooltip(strTooltipID, strOrient, "");
  7398.         objXULTooltip.addEventListener("popupshowing", function(event) {
  7399.             return EBToolbarDesignManager_CT2384137.OnTooltipPopupShowing(event, strToolbarButtonID);
  7400.             event.stopPropagation();
  7401.         }, false);
  7402.  
  7403.         objMainPopupSet.appendChild(objXULTooltip);
  7404.     },
  7405.  
  7406.     ExecuteApplication: function(exeAlias, params, notFoundLink, event) {
  7407.         var strExeFile = EBWindows_CT2384137.GetApplicationFullPath(exeAlias);
  7408.         var bIsExists = EBWindows_CT2384137.WindowsShellDirectExecute(strExeFile, null, false);
  7409.         if (bIsExists)
  7410.             EBWindows_CT2384137.WindowsShellDirectExecute(strExeFile, params, true);
  7411.         else
  7412.             EBButtonManager_CT2384137.LoadLink(event, null, notFoundLink, 'NEW');
  7413.     }
  7414. };
  7415.  
  7416. /*************************** Toolbar global object ******************************/
  7417. /*
  7418. var EBToolbarData_CT2384137 =
  7419. {
  7420.     //toolbar containers
  7421.     ToolbarInstance: null, //whole toolbar
  7422.     ToolbarPublisherContainer: null, //left "publisher" section
  7423.     ToolbarSettingsContainer: null,
  7424.     ToolbarUserComponentsContainer: null,
  7425.     ToolbarThirdPartyContainer: null,
  7426.     ToolbarMyStuffContainer: null, //right "marketplace" section
  7427.  
  7428.     SettingsComponents: new EBArrayHashObject_CT2384137(),
  7429.     UserComponents: new EBArrayHashObject_CT2384137(),
  7430.     ThirdPartyComponents: new EBArrayHashObject_CT2384137(),
  7431.     MyStuffComponents: new EBArrayHashObject_CT2384137(),
  7432.  
  7433.     IsHighlighting: false,
  7434.     ToolbarComponents: null,
  7435.     MyStuffComponents: null,
  7436.     ToolbarSuggests: null,
  7437.     SelectedSearchEngine: null,
  7438.  
  7439.     Initialize: function() {
  7440.         this.ToolbarInstance = document.getElementById(EBGlobalConsts_CT2384137.ToolbarId);
  7441.         this.ToolbarPublisherContainer = document.getElementById(EBGlobalConsts_CT2384137.ToolbarPublisherContainerId);
  7442.         this.ToolbarSettingsContainer = this.ToolbarPublisherContainer.childNodes[0];
  7443.         this.ToolbarUserComponentsContainer = this.ToolbarPublisherContainer.childNodes[1];
  7444.         this.ToolbarThirdPartyContainer = this.ToolbarPublisherContainer.childNodes[2];
  7445.         this.ToolbarUserContainer = document.getElementById(EBGlobalConsts_CT2384137.ToolbarUserContainerId);
  7446.         this.ToolbarComponents = new EBArrayHashObject_CT2384137();
  7447.         this.ToolbarUserComponents = new EBArrayHashObject_CT2384137();
  7448.         this.ToolbarRTL = EBActionManager_CT2384137.IsToolbarRTL();
  7449.     }
  7450. };*/
  7451.  
  7452. var EBToolbarDesignConsts_CT2384137 =
  7453. {
  7454.     SubMenuRTLClass: 'eb-submenu-rtl_CT2384137',
  7455.     SubMenuLTRClass: 'eb-submenu-ltr_CT2384137',
  7456.     SubMenuRTLClassFF3: 'eb-submenu-rtlFF3_CT2384137',
  7457.     SubMenuLTRClassFF3: 'eb-submenu-ltrFF3_CT2384137',
  7458.     ToolbarButtonHideTextClass: 'eb-toolbarbutton-hidetext_CT2384137',
  7459.     ToolbarButtonShowTextClass: 'eb-toolbarbutton-showtext_CT2384137',
  7460.     ToolbarButtonShowTextClassRTL: 'eb-toolbarbutton-showtextRTL_CT2384137',
  7461.     ToolbarButtonMenuButtonClassMAC: 'eb-toolbarbutton-menubuttonMAC_CT2384137',
  7462.     ToolbarButtonMenuButtonClassWIN: 'eb-toolbarbutton-menubuttonWIN_CT2384137',
  7463.     ToolbarButtonMenuButtonClassLINUX: 'eb-toolbarbutton-menubuttonLINUX_CT2384137',
  7464.     ToolbarButtonMenuClass: 'eb-toolbarbutton-menu_CT2384137',
  7465.     ToolbarButtonChevronClass: 'eb-toolbarbutton-chevron_CT2384137',
  7466.     ToolbarMenuButtonOnlyIconClass: 'eb-toolbarbutton-menu-onlyicon_CT2384137',
  7467.     ToolbarButtonOnlyIconClass: 'eb-toolbarbutton-onlyicon_CT2384137',
  7468.     ToolbarMaxImageHeightStyle: 'max-height:25px;'
  7469. };
  7470.  
  7471. var EBToolbarDesignManager_CT2384137 =
  7472. {
  7473.     //set toolbarbuttons class - according to their type
  7474.     //or shrink unshrink state of toolbar
  7475.     SetToolbarButtonClass: function(strCompID, XULToolbarButton) {
  7476.         if (!XULToolbarButton) return;
  7477.  
  7478.         var arrClassAttribute = new Array();
  7479.  
  7480.         var strLabel = XULToolbarButton.getAttribute('label');
  7481.         var strImage = XULToolbarButton.getAttribute('image');
  7482.         var strType = XULToolbarButton.getAttribute('type');
  7483.  
  7484.         if (strType == 'menu-button') {
  7485.             if (EBGlobalManager_CT2384137.IsWindowsPlatform())
  7486.                 arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarButtonMenuButtonClassWIN;
  7487.             else if (EBGlobalManager_CT2384137.IsMacintoshPlatform())
  7488.                 arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarButtonMenuButtonClassMAC;
  7489.             else
  7490.                 arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarButtonMenuButtonClassLINUX;
  7491.         }
  7492.    
  7493.         //check if this button is regular button with image only
  7494.         //to set to it the special css class that reduce the gap 
  7495.         //between the image edge to the toolbar 
  7496.         //it also check that this style will be set to only icon in toolbarbutton type=menubutton
  7497.         //to reduce that bug
  7498.         if (!strLabel && strImage) {
  7499.             if (strType == 'menu')
  7500.                 arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarMenuButtonOnlyIconClass;
  7501.             else
  7502.                 arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarButtonOnlyIconClass;
  7503.         }
  7504.  
  7505.  
  7506.         var strClassHideText = EBToolbarDesignConsts_CT2384137.ToolbarButtonHideTextClass;
  7507.         var strClassShowText = EBToolbarDesignConsts_CT2384137.ToolbarButtonShowTextClass;
  7508.         var objComponent = EBComponentsManager_CT2384137.GetComponentByCompID(strCompID);
  7509.         var btnText = '';
  7510.  
  7511.         if (objComponent)
  7512.             btnText = objComponent.ComponentItem.DisplayText;
  7513.  
  7514.         if (!this.IsLTRLanguage(btnText))
  7515.             strClassShowText = EBToolbarDesignConsts_CT2384137.ToolbarButtonShowTextClassRTL;
  7516.  
  7517.         if (EBActionManager_CT2384137.ToolbarShrink()) {
  7518.             if (strLabel) {
  7519.                 arrClassAttribute[arrClassAttribute.length] = strClassHideText;
  7520.  
  7521.                 if (strType == 'menu')
  7522.                     arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarMenuButtonOnlyIconClass;
  7523.                 else
  7524.                     arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarButtonOnlyIconClass;
  7525.             }
  7526.  
  7527.             this.SetTooltipShrink(strCompID, XULToolbarButton);
  7528.         }
  7529.         else {
  7530.             if (strLabel) {
  7531.                 arrClassAttribute[arrClassAttribute.length] = strClassShowText;
  7532.  
  7533.                 if (strType == 'menu')//if there is label then set this class(padding the text class)
  7534.                     arrClassAttribute[arrClassAttribute.length] = EBToolbarDesignConsts_CT2384137.ToolbarButtonMenuClass;
  7535.             }
  7536.  
  7537.             this.SetTooltipUnShrink(XULToolbarButton);
  7538.         }
  7539.  
  7540.         var strClass = arrClassAttribute.join(' ');
  7541.         XULToolbarButton.setAttribute('class', strClass);
  7542.     },
  7543.  
  7544.     SetToolbarButtonGlobalStyle: function(objToolbarButton) {
  7545.         //i set the style of the button using the getAnonymousNodes of that button
  7546.         //this method return the core elements (low-level elements) of this xul element
  7547.         //and this way we can set the style only to them - and not to their dom childs!
  7548.         //if this regular button we need to set the xul:label Anonymous Node
  7549.         //if this toolbarbutton is from type menu-button we set the xul:toolbarbutton core element
  7550.         var strStyle = oToolbarSkin_CT2384137.getStyleString();
  7551.         if (objToolbarButton.tagName == 'label')
  7552.             objToolbarButton.setAttribute('style', strStyle);
  7553.         else {
  7554.             var objAnonymousNodes = document.getAnonymousNodes(objToolbarButton);
  7555.             var objNode = null;
  7556.  
  7557.             if (objAnonymousNodes) {
  7558.                 for (var i = 0; i < objAnonymousNodes.length; i++) {
  7559.                     objNode = objAnonymousNodes[i];
  7560.                     if (objNode.tagName == 'xul:toolbarbutton' ||
  7561.                         objNode.tagName == 'xul:label') {
  7562.                         objNode.setAttribute('style', strStyle);
  7563.                     }
  7564.                 }
  7565.             }
  7566.         }
  7567.     },
  7568.  
  7569.     IdealTextColor: function(bg) {
  7570.         var nThreshold = 105;
  7571.         var bgR = parseInt(bg.slice(1, 3), 16);
  7572.         var bgG = parseInt(bg.slice(3, 5), 16);
  7573.         var bgB = parseInt(bg.slice(5, 7), 16);
  7574.         var bgDelta = parseInt((bgR * 0.299) + (bgG * 0.587) + (bgB * 0.114));
  7575.         var foreColor = (255 - bgDelta < nThreshold) ? '#000000' : '#FFFFFF';
  7576.         return foreColor;
  7577.     },
  7578.  
  7579.     SetToolbarSearchBoxBGColor: function(objSearchBox, strBGColor) {
  7580.         if (strBGColor && strBGColor.toUpperCase() != '#FFFFFF') {
  7581.             objSearchBox.inputField.setAttribute('style', 'background-color:' + strBGColor + ';');
  7582.             objSearchBox.setAttribute('style', 'background-color:' + strBGColor + ';');
  7583.             var textColor = this.IdealTextColor(strBGColor);
  7584.             if (textColor != "#000000") {
  7585.                 var oldStyle = objSearchBox.inputField.getAttribute("style");
  7586.                 objSearchBox.inputField.setAttribute("style", oldStyle + "color:" + textColor + ";");
  7587.             }
  7588.         }
  7589.     },
  7590.  
  7591.     SetTooltipShrink: function(strCompID, XULToolbarButton) {
  7592.         if (this.IsSpecialTooltip(XULToolbarButton)) {
  7593.             return;
  7594.         }
  7595.  
  7596.         //check if this toolbar need tooltip shrink
  7597.         var strLabel = XULToolbarButton.getAttribute('label');
  7598.         if (!strLabel) {
  7599.             return;
  7600.         }
  7601.  
  7602.         var strTooltipID = EBComponentsManager_CT2384137.GetTooltipID(strCompID);
  7603.  
  7604.         XULToolbarButton.setAttribute('tooltip', strTooltipID);
  7605.         XULToolbarButton.removeAttribute('tooltiptext');
  7606.     },
  7607.  
  7608.     SetTooltipUnShrink: function(XULToolbarButton) {
  7609.         if (this.IsSpecialTooltip(XULToolbarButton)) return;
  7610.  
  7611.         XULToolbarButton.removeAttribute('tooltip');
  7612.         var strOriginalTooltip = XULToolbarButton.getAttribute(EBGlobalConsts_CT2384137.Attributes.XULTooltip);
  7613.  
  7614.         if (strOriginalTooltip)
  7615.             XULToolbarButton.setAttribute('tooltiptext', strOriginalTooltip);
  7616.     },
  7617.  
  7618.     //function that checks if the toolbarbutton element is set to 
  7619.     //special tooltip to not set to it the shrink-unshrink tooltip - like the weather forecast tooltip
  7620.     IsSpecialTooltip: function(oXULToolbarButton) {
  7621.         var strTooltipID = oXULToolbarButton.getAttribute('tooltip');
  7622.  
  7623.         if (strTooltipID == EBWeatherGUIConsts_CT2384137.ForecastTooltipID) return true;
  7624.  
  7625.         return false;
  7626.     },
  7627.  
  7628.     OnTooltipPopupShowing: function(event, strToolbarButtonID) {
  7629.  
  7630.         if (event.eventPhase == 2) {
  7631.             var XULTooltip = event.target;
  7632.             var XULToolbarButton = document.getElementById(strToolbarButtonID);
  7633.  
  7634.             //check to see if the mouse is hover the toolbarbutton
  7635.             //to prevent this tooltip shown on this toolbar buttons childs
  7636.             if (!EBGlobalManager_CT2384137.IsElementInScreenCoordinates(XULToolbarButton))
  7637.                 return false;
  7638.  
  7639.             while (XULTooltip.childNodes.length > 0)
  7640.                 XULTooltip.removeChild(XULTooltip.firstChild);
  7641.  
  7642.             var strOriginalTooltip = XULToolbarButton.getAttribute(EBGlobalConsts_CT2384137.Attributes.XULTooltip);
  7643.             var strLabel = XULToolbarButton.getAttribute('label');
  7644.  
  7645.             var XULLabelButtonLabel = null;
  7646.             var XULLabelButtonTooltip = null;
  7647.  
  7648.             if (strLabel)
  7649.                 XULLabelButtonLabel = EBXULFactory_CT2384137.CreateLabel(strLabel, '');
  7650.  
  7651.             if (strOriginalTooltip)
  7652.                 XULLabelButtonTooltip = EBXULFactory_CT2384137.CreateLabel(strOriginalTooltip, '');
  7653.  
  7654.             if (XULLabelButtonLabel)
  7655.                 XULTooltip.appendChild(XULLabelButtonLabel);
  7656.  
  7657.             if (XULLabelButtonTooltip)
  7658.                 XULTooltip.appendChild(XULLabelButtonTooltip);
  7659.  
  7660.             return true;
  7661.         }
  7662.  
  7663.         return false;
  7664.     },
  7665.  
  7666.     IsLTRLanguage: function(strText) {
  7667.         if (!strText) return true;
  7668.  
  7669.         var ch = '';
  7670.         for (var i = 0; i < strText.length; i++) {
  7671.             ch = strText.charCodeAt(i)
  7672.             if (ch >= 1488 && ch <= 1514)
  7673.                 return false;
  7674.         }
  7675.  
  7676.         return true;
  7677.     },
  7678.  
  7679.     GetToolbarWidth: function() {
  7680.         return parseInt(document.defaultView.getComputedStyle(EBToolbarManager_CT2384137.dataToolbarObject.ToolbarPublisherContainer, null).getPropertyValue("width"));
  7681.     },
  7682.  
  7683.     verticalAlign: function(obj) {
  7684.         var objParent = obj.parentNode;
  7685.         var objHeight = obj.boxObject.height;
  7686.         var parentHeight = parseInt(document.defaultView.getComputedStyle(objParent, null).getPropertyValue("height"));
  7687.         var iMargin = (parentHeight - objHeight) / 2;
  7688.         objParent.style.paddingTop = iMargin + "px";
  7689.     }
  7690. };
  7691.  
  7692. //this class is ment for action on the firefox browser itself
  7693. //like the context-menu etc...
  7694.  
  7695. var EBFirefoxBrowserManager_CT2384137 =
  7696. {
  7697.     OnLoadWindow: function() {
  7698.         //set the context menu 
  7699.         this.SetContextMenuPopupShowingListener();
  7700.     },
  7701.  
  7702.     //set event listener to popupshowing so we coulde catch
  7703.     //the change for the check uncheck of the toolbar from the toolbars
  7704.     //context menu of the browser itself
  7705.     SetContextMenuPopupShowingListener: function() {
  7706.         var oToolbarsContextMenu = document.getElementById('toolbar-context-menu');
  7707.         var oToolbarsMenu = document.getElementById('viewToolbarsMenu');
  7708.         if(oToolbarsContextMenu)
  7709.             oToolbarsContextMenu.addEventListener('popupshowing',
  7710.                                         EBFirefoxBrowserManager_CT2384137.OnPopupShowingToolbarContextMenu,
  7711.                                         false);
  7712.         if(oToolbarsMenu)
  7713.             oToolbarsMenu.addEventListener('popupshowing',
  7714.                                         EBFirefoxBrowserManager_CT2384137.OnPopupShowingToolbarContextMenu,
  7715.                                         false);
  7716.     },
  7717.  
  7718.     OnPopupShowingToolbarContextMenu: function(event) {
  7719.         var oToolbarsContextMenu = event.target;
  7720.  
  7721.         //set the listener for the command on this toolbar context menu item:
  7722.  
  7723.         //get the toolbar name for comparison
  7724.         var strToolbarLabel = "IObitCom Toolbar";
  7725.  
  7726.         var oMenuItem = null;
  7727.         //loop all the elments in the context menu till there 
  7728.         //is a match with the toolbar name and set to this menu item 
  7729.         //element the listener for the oncommand
  7730.         for (var i = 0; i < oToolbarsContextMenu.childNodes.length; i++) {
  7731.             oMenuItem = oToolbarsContextMenu.childNodes[i];
  7732.  
  7733.             if (oMenuItem.getAttribute('label') == strToolbarLabel) {
  7734.                 oMenuItem.addEventListener('command',
  7735.                                     EBFirefoxBrowserManager_CT2384137.OnCommandToolbarContextMenuItem,
  7736.                                     false);
  7737.                 break;
  7738.             }
  7739.         }
  7740.     },
  7741.  
  7742.     OnCommandToolbarContextMenuItem: function(event) {
  7743.         var oMenuItem = event.target;
  7744.         var strChecked = oMenuItem.getAttribute('checked');
  7745.  
  7746.         if (strChecked)
  7747.             strChecked = strChecked.toLowerCase();
  7748.  
  7749.         if (strChecked == 'true')
  7750.             EBLoadToolbar_CT2384137();
  7751.         else
  7752.             EBUnloadToolbar_CT2384137(false);
  7753.     }
  7754. }
  7755. var EBHighlighterConsts_CT2384137 =
  7756. {
  7757.     DisplayText: 'Highlighter',
  7758.     HighlightButtonsContainerID: 'EBHighlighterButtonsContainer_CT2384137',
  7759.  
  7760.     Images:
  7761.     {
  7762.         HighlighterChevron: 'chrome://iobitcom/skin/highlighter_chevron.png',
  7763.         HighlighterSearchTerm: 'chrome://iobitcom/skin/highlighterSearchTerm.png'
  7764.     },
  7765.  
  7766.     Attributes:
  7767.     {
  7768.         HighlightButtonName: 'EB_HIGHLIGHT_BUTTON_ATT_NAME',
  7769.         HighlightButtonValue: 'EB_HIGHLIGHT_BUTTON_ATT_VALUE',
  7770.         IsInChevron: 'EB_HIGHLIGHTER_IS_IN_CHEVRON'
  7771.     }
  7772. };
  7773.  
  7774. var EBHighlighterManager_CT2384137 =
  7775. {
  7776.     FindRange: Components.classes['@mozilla.org/embedcomp/rangefind;1'].
  7777.                     createInstance().QueryInterface(Components.interfaces.nsIFind),
  7778.  
  7779.     COLORS: ['Yellow', 'Cyan', 'Fuchsia', 'Chartreuse', 'Dodgerblue'],
  7780.     SPAN_ID: 'EBSpanHighlighter',
  7781.     ARR_TERMS: null,
  7782.  
  7783.     OnCommandHighlighter: function(event) {
  7784.         EBToolbarManager_CT2384137.dataToolbarObject.IsHighlighting = !EBToolbarManager_CT2384137.dataToolbarObject.IsHighlighting;
  7785.  
  7786.         //get the object from the toolbar 
  7787.         var objXULHighlighterToolbarButton = EBSearchBoxManager_CT2384137.GetHighlighterButtonOnToolbar();
  7788.  
  7789.  
  7790.         if (EBToolbarManager_CT2384137.dataToolbarObject.IsHighlighting) {
  7791.             objXULHighlighterToolbarButton.setAttribute("checked", true);
  7792.             this.Highlight();
  7793.         }
  7794.         else {
  7795.             objXULHighlighterToolbarButton.setAttribute("checked", false);
  7796.             this.UnHighlight();
  7797.         }
  7798.  
  7799.         //Usage
  7800.         EBUsageHighlighter_CT2384137.OnClick(EBToolbarManager_CT2384137.dataToolbarObject.IsHighlighting);
  7801.     },
  7802.  
  7803.     GetSearchTerm: function() {
  7804.         var strSearchQuery = EBComponentsManager_CT2384137.GetSearchBoxComponent().xulMenuList.value;
  7805.         return strSearchQuery;
  7806.     },
  7807.  
  7808.     Highlight: function() {
  7809.         //get the value from the menulist textbox
  7810.         this.ARR_TERMS = null;
  7811.         this.ARR_TERMS = this.GetTermsToHighlight();
  7812.  
  7813.         for (var i = 0; i < this.ARR_TERMS.length; i++) {
  7814.             this.HighlightWindow(null, this.ARR_TERMS[i], this.COLORS[i % this.COLORS.length]);
  7815.         }
  7816.     },
  7817.  
  7818.     UnHighlight: function() {
  7819.         var arrTabs = EBGlobalManager_CT2384137.GetAllTabs();
  7820.         for (var i = 0; i < arrTabs.length; i++)
  7821.             this.ClearHighlight(arrTabs[i].contentWindow);
  7822.     },
  7823.  
  7824.     TabChange: function(aProgress) {
  7825.         if (EBToolbarManager_CT2384137.dataToolbarObject.IsHighlighting)
  7826.             this.Highlight();
  7827.         else
  7828.             this.UnHighlight();
  7829.     },
  7830.  
  7831.     GetTermsToHighlight: function() {
  7832.         var strSearchQuery = this.GetSearchTerm();
  7833.         var tokens = [];
  7834.         tokens = this.TokenizeSearchQuery(strSearchQuery);
  7835.         tokens = this.RemoveOperators(tokens);
  7836.         tokens = this.NormalizeSpacing(tokens);
  7837.         return this.RemoveAdjacentDuplicates(tokens);
  7838.     },
  7839.  
  7840.     TokenizeSearchQuery: function(input) {
  7841.         var tokens = [];
  7842.         var state = 0;
  7843.         for (var i = 0; i < input.length; ++i) {
  7844.             var ch = input[i];
  7845.             if (state == 0) {
  7846.                 if (ch == '"') {
  7847.                     tokens.push(["", true]);
  7848.                     state = 2
  7849.                 }
  7850.                 else if (!EBGlobalManager_CT2384137.IsCharWhitespace(ch) && !EBGlobalManager_CT2384137.IsCharPunctuation(ch)) {
  7851.                     tokens.push([ch, false]);
  7852.                     state = 1;
  7853.                 }
  7854.             }
  7855.             else if (state == 1) {
  7856.                 if (EBGlobalManager_CT2384137.IsCharWhitespace(ch) || EBGlobalManager_CT2384137.IsCharPunctuation(ch)) {
  7857.                     state = 0;
  7858.                 }
  7859.                 else {
  7860.                     tokens[tokens.length - 1][0] += ch;
  7861.                 }
  7862.             }
  7863.             else if (state == 2) {
  7864.                 if (ch == '"') {
  7865.                     state = 0;
  7866.                 }
  7867.                 else {
  7868.                     tokens[tokens.length - 1][0] += ch;
  7869.                 }
  7870.             }
  7871.         }
  7872.         return tokens;
  7873.     },
  7874.  
  7875.     RemoveOperators: function(tokens) {
  7876.         var results = [];
  7877.         for (var i = 0; i < tokens.length; ++i) {
  7878.             var token = tokens[i][0];
  7879.             if (tokens[i][1]) {
  7880.                 if (token.length > 0) {
  7881.                     results.push(token);
  7882.                 }
  7883.                 continue;
  7884.             }
  7885.             if (token.toUpperCase() == "OR") {
  7886.                 continue;
  7887.             }
  7888.             if (token[0] == "-") {
  7889.                 continue;
  7890.             }
  7891.             if (token == "*" || (token == "/" || (token == "^" || token == "%"))) {
  7892.                 continue;
  7893.             }
  7894.             if (/\d+\.\.\.\d+/.test(token)) {
  7895.                 continue;
  7896.             }
  7897.             if (token[0] == "~") {
  7898.                 token = token.substring(1);
  7899.             }
  7900.             token = token.replace(/-+/g, " ");
  7901.             results.push(token);
  7902.         }
  7903.         return results;
  7904.     },
  7905.  
  7906.     NormalizeSpacing: function(tokens) {
  7907.         var results = [];
  7908.         for (var i = 0; i < tokens.length; ++i) {
  7909.             var token = tokens[i];
  7910.             token = token.replace(/^\s+/, "");
  7911.             token = token.replace(/\s+$/, "");
  7912.             token = token.replace(/\s+/g, " ");
  7913.             if (token.length > 0) {
  7914.                 results.push(token);
  7915.             }
  7916.         }
  7917.         return results;
  7918.     },
  7919.  
  7920.     RemoveAdjacentDuplicates: function(list) {
  7921.         if (list.length == 0) {
  7922.             return list;
  7923.         }
  7924.         var last = 0;
  7925.         for (var i = 1; i < list.length; ++i) {
  7926.             if (list[i] != list[last]) {
  7927.                 list[++last] = list[i];
  7928.             }
  7929.         }
  7930.         list.length = last + 1;
  7931.         return list;
  7932.     },
  7933.  
  7934.     IsNodeInputNodeOrChildOf: function(node) {
  7935.         if (node.nodeName.toUpperCase() == "INPUT")
  7936.             return true;
  7937.         if (node.parentNode != null)
  7938.             return this.IsNodeInputNodeOrChildOf(node.parentNode);
  7939.         return false;
  7940.     },
  7941.  
  7942.     HighlightWindow: function(win, text, color) {
  7943.         if (!win)
  7944.             win = window._content;
  7945.  
  7946.         if (win.frames != null) {
  7947.             for (var i = 0; i < win.frames.length; i++) {
  7948.                 this.HighlightWindow(win.frames[i], text, color);
  7949.             }
  7950.         }
  7951.  
  7952.         var doc = win.document;
  7953.         if (doc != null) {
  7954.             var body = doc.body;
  7955.             if (body != null) {
  7956.                 var docRange = doc.createRange();
  7957.                 docRange.selectNode(body);
  7958.                 var startRange = docRange.cloneRange();
  7959.                 startRange.collapse(true);
  7960.                 var stopRange = docRange.cloneRange();
  7961.                 stopRange.collapse(false);
  7962.  
  7963.  
  7964.                 this.FindRange.caseSensitive = false;
  7965.                 this.FindRange.findBackwards = false;
  7966.                 var result = this.FindRange.Find(text, docRange, startRange, stopRange);
  7967.                 while (null != result) {
  7968.                     if (result.endContainer != null && (result.startContainer != null && (result.endContainer.nodeType == Node.TEXT_NODE && (result.startContainer.nodeType == Node.TEXT_NODE && (!this.IsNodeInputNodeOrChildOf(result.startContainer) && !this.IsNodeInputNodeOrChildOf(result.endContainer)))))) {
  7969.                         var startChar = null;
  7970.                         if (result.startOffset > 0) {
  7971.                             startChar = result.startContainer.nodeValue.charAt(result.startOffset - 1)
  7972.                         }
  7973.                         var endChar = result.endContainer.nodeValue.charAt(result.endOffset);
  7974.                         if (!EBGlobalManager_CT2384137.IsWordCharacter(startChar) && !EBGlobalManager_CT2384137.IsWordCharacter(endChar)) {
  7975.                             var spanNode = this.SetHighlight(result, color, this.SPAN_ID);
  7976.                             startRange.selectNode(spanNode);
  7977.                         }
  7978.                         else {
  7979.                             startRange = result
  7980.                         }
  7981.                     }
  7982.                     else {
  7983.                         startRange = result
  7984.                     }
  7985.  
  7986.                     startRange.collapse(false);
  7987.                     result = this.FindRange.Find(text, docRange, startRange, stopRange)
  7988.                 }
  7989.  
  7990.             }
  7991.         }
  7992.  
  7993.     },
  7994.  
  7995.     SetHighlight: function(range, color, id) {
  7996.         var startContainer = range.startContainer;
  7997.         var spanNode = startContainer.ownerDocument.createElement("span");
  7998.         spanNode.style.backgroundColor = color;
  7999.         spanNode.style.color = "black";
  8000.         spanNode.id = id;
  8001.         var docfrag = range.extractContents();
  8002.         spanNode.appendChild(docfrag);
  8003.         range.insertNode(spanNode);
  8004.         return spanNode;
  8005.     },
  8006.  
  8007.     ClearHighlight: function(win) {
  8008.         if (!this.ARR_TERMS)
  8009.             return;
  8010.  
  8011.         if (!win)
  8012.             win = window._content;
  8013.  
  8014.         var i = 0; // Avoid multiple redeclaration warnings
  8015.  
  8016.         for (i = 0; win.frames && i < win.frames.length; i++) {
  8017.             this.ClearHighlight(win.frames[i]);
  8018.         }
  8019.  
  8020.         var doc = win.document;
  8021.         if (!doc) { return; }
  8022.         var body = doc.body;
  8023.         if (!body) { return; }
  8024.  
  8025.         var count = body.childNodes.length;
  8026.  
  8027.         for (i = 0; i < this.ARR_TERMS.length; i++) {
  8028.             var term = this.ARR_TERMS[i];
  8029.  
  8030.             var searchRange = doc.createRange();
  8031.             searchRange.setStart(body, 0);
  8032.             searchRange.setEnd(body, count);
  8033.  
  8034.             var startPt = doc.createRange();
  8035.             startPt.setStart(body, 0);
  8036.             startPt.setEnd(body, 0);
  8037.  
  8038.             var endPt = doc.createRange();
  8039.             endPt.setStart(body, count);
  8040.             endPt.setEnd(body, count);
  8041.  
  8042.             var retRange = null;
  8043.             while ((retRange = this.FindRange.Find(term, searchRange, startPt, endPt))) {
  8044.                 var startContainer = retRange.startContainer;
  8045.                 var elem = null;
  8046.                 try { elem = startContainer.parentNode; } catch (e) { }
  8047.                 if (elem) {
  8048.                     // Avoid multiple redeclaration warnings
  8049.                     var docfrag = null;
  8050.                     var child = null;
  8051.                     var next = null;
  8052.                     var parent = null;
  8053.  
  8054.                     if (elem.getAttribute("id") == this.SPAN_ID) {
  8055.                         docfrag = doc.createDocumentFragment();
  8056.                         next = elem.nextSibling;
  8057.                         parent = elem.parentNode;
  8058.  
  8059.                         while ((child = elem.firstChild)) {
  8060.                             docfrag.appendChild(child);
  8061.                         }
  8062.  
  8063.                         startPt = doc.createRange();
  8064.                         startPt.setStartAfter(elem);
  8065.  
  8066.                         parent.removeChild(elem);
  8067.                         parent.insertBefore(docfrag, next);
  8068.                     }
  8069.                     else {
  8070.                         try {
  8071.                             while ((elem = elem.parentNode)) {
  8072.                                 if (elem.getAttribute("id") == this.SPAN_ID) {
  8073.                                     docfrag = doc.createDocumentFragment();
  8074.                                     next = elem.nextSibling;
  8075.                                     parent = elem.parentNode;
  8076.  
  8077.                                     while ((child = elem.firstChild)) {
  8078.                                         docfrag.appendChild(child);
  8079.                                     }
  8080.  
  8081.                                     startPt = doc.createRange();
  8082.                                     startPt.setStartAfter(elem);
  8083.  
  8084.                                     parent.removeChild(elem);
  8085.                                     parent.insertBefore(docfrag, next);
  8086.                                     break;
  8087.                                 }
  8088.                             }
  8089.                         } catch (e) { }
  8090.                         startPt = doc.createRange();
  8091.                         startPt.setStart(retRange.endContainer, retRange.endOffset);
  8092.                     }
  8093.                 }
  8094.                 else {
  8095.                     startPt = doc.createRange();
  8096.                     startPt.setStart(retRange.endContainer, retRange.endOffset);
  8097.                 }
  8098.  
  8099.                 startPt.collapse(true);
  8100.             }
  8101.         }
  8102.     },
  8103.  
  8104.     OnCommandSearchTerm: function(event) {
  8105.         var strTerm = event.target.getAttribute("label");
  8106.         //if shift key is pressed the search going backwards
  8107.         this.FindSingleTerm(strTerm, !event.shiftKey);
  8108.  
  8109.         EBUsageHighlighter_CT2384137.OnClickWord();
  8110.     },
  8111.  
  8112.     FindSingleTerm: function(text, forward) {
  8113.         var objFind = getBrowser().webBrowserFind;
  8114.  
  8115.         objFind.searchString = text;
  8116.         objFind.matchCase = false;
  8117.         objFind.wrapFind = true;
  8118.         objFind.findBackwards = !forward;
  8119.  
  8120.         var result = objFind.findNext();
  8121.     },
  8122.  
  8123.     SetHighlightButtons: function() {
  8124.         var XULHighlighter = EBSearchBoxManager_CT2384137.GetHighlighterButtonOnToolbar();
  8125.         
  8126.         //check if the highlighter exists on the toolbar and if not return
  8127.         if (!XULHighlighter) return;
  8128.         
  8129.         //set the highlighter state
  8130.         if (EBGlobalManager_CT2384137.TotalTrim(this.GetSearchTerm())) {
  8131.             
  8132.             XULHighlighter.setAttribute('disabled', 'false');
  8133.             XULHighlighter.setAttribute('image', oToolbarSkin_CT2384137.highlighterActiveImageUrl);
  8134.         }
  8135.         else {
  8136.             XULHighlighter.setAttribute('disabled', 'true');
  8137.             XULHighlighter.setAttribute('image', oToolbarSkin_CT2384137.highlighterInactiveImageUrl);
  8138.         }
  8139.     }
  8140. };
  8141.  
  8142. var EBInitializeToolbarManager_CT2384137 =
  8143. {
  8144.  
  8145.     GetSetupFinishURL: function() {
  8146.         var strSetupFinish = EBActionManager_CT2384137.GetWebServerURL('SetUpFinish/')
  8147.  
  8148.         return strSetupFinish;
  8149.     },
  8150.  
  8151.     GetInitializePrefName: function() {
  8152.         var strInitializePrefName = EBPreferenceConsts_CT2384137.Initialize;
  8153.         return strInitializePrefName;
  8154.     },
  8155.  
  8156.     IsFirstRun: function() {
  8157.         var strInitializePrefName = this.GetInitializePrefName();
  8158.         //if there isn't any value in this pref it's first time load
  8159.         return !EBToolbarPreferenceManager_CT2384137.HasUserValue(strInitializePrefName);
  8160.  
  8161.     },
  8162.  
  8163.     IsFirstRunForCommonPrefs: function() {
  8164.         var strInitializePrefName = EBPreferenceConsts_CT2384137.InitializeCommonPrefs;
  8165.         //if there isn't any value in this pref it's first time load
  8166.         return !EBToolbarPreferenceManager_CT2384137.HasUserValue(strInitializePrefName);
  8167.     },
  8168.  
  8169.     SetInitializePref: function() {
  8170.         var strInitializePrefName = this.GetInitializePrefName();
  8171.         EBToolbarPreferenceManager_CT2384137.SetPref(strInitializePrefName, true);
  8172.     },
  8173.  
  8174.     SetInitializeCommonPrefsPref: function() {
  8175.         var strInitializePrefName = EBPreferenceConsts_CT2384137.InitializeCommonPrefs;
  8176.         EBToolbarPreferenceManager_CT2384137.SetPref(strInitializePrefName, true);
  8177.     },
  8178.  
  8179.     Initialize: function() {
  8180.         //check if there is any value in this pref and if not this is the first initialization
  8181.         if (this.IsFirstRun()) {
  8182.             //set the init pref
  8183.             this.SetInitializePref();
  8184.  
  8185.             if (this.IsOpenSetupFinishPage())
  8186.                 this.LoadSetupFinishPage();
  8187.         }
  8188.  
  8189.         if (this.IsFirstRunForCommonPrefs()) {
  8190.             //set the init pref
  8191.             this.SetInitializeCommonPrefsPref();
  8192.  
  8193.             this.AddMeToInstalledToolbarsList(EBPreferenceConsts_CT2384137.ToolbarsList);
  8194.         }
  8195.     },
  8196.  
  8197.     LoadSetupFinishPage: function() {
  8198.         //open the setup finish page in new process, because otherwise FF 2.* closes the new tab
  8199.         var strSetupFinish = EBInitializeToolbarManager_CT2384137.GetSetupFinishURL();
  8200.         setTimeout(function() {
  8201.             EBLinkManager_CT2384137.LoadLinkURL(null, strSetupFinish, "TAB", "", "");
  8202.         }, 500);
  8203.     },
  8204.  
  8205.     IsOpenSetupFinishPage: function() {
  8206.         if (EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.IsOpenThankYouPage))
  8207.             return EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.IsOpenThankYouPage)
  8208.         else
  8209.             return true;
  8210.     },
  8211.  
  8212.     AddMeToInstalledToolbarsList: function(strPrefName) {
  8213.         var strToolbarsList = EBGlobalPreferenceManager_CT2384137.GetPref(strPrefName);
  8214.  
  8215.         if (!strToolbarsList)
  8216.             strToolbarsList = 'CT2384137';
  8217.         else {
  8218.             var arrToolbars = strToolbarsList.split(',');
  8219.             var bFound = false;
  8220.  
  8221.             for (var i = 0; i < arrToolbars.length; i++)
  8222.                 if (arrToolbars[i] == 'CT2384137')
  8223.                 bFound = true;
  8224.  
  8225.             if (!bFound)
  8226.                 arrToolbars.push('CT2384137');
  8227.  
  8228.             strToolbarsList = arrToolbars.join(',');
  8229.         }
  8230.  
  8231.         EBGlobalPreferenceManager_CT2384137.SetPref(strPrefName, strToolbarsList);
  8232.     }
  8233. }
  8234.  
  8235.  
  8236.  
  8237.  
  8238. var EBLinkManager_CT2384137 =
  8239. {
  8240.     //all calls for link loads from any place should be done with this function!
  8241.     LoadLinkURL: function(oEvent, strURL, strTarget, strPostParams,
  8242.                             strParentId, oUploadStream, isUser, strAncestorId,
  8243.                             strCompId, strCompType, strSource) {
  8244.         //check validation of the url
  8245.  
  8246.         if (!strURL || strURL.toLowerCase() == EBGlobalConsts_CT2384137.HTTP_PREFIX || EBGlobalManager_CT2384137.TotalTrim(strURL) == "")
  8247.             return;
  8248.         //convert aliases in the link
  8249.         strURL = EBActionManager_CT2384137.ConvertAliasesUrl(strURL);
  8250.  
  8251.         //check if the click is from middle button to open in a new tab
  8252.         if (oEvent && oEvent.button == 1) {
  8253.             strTarget = "TAB";
  8254.         }
  8255.  
  8256.         //check if this link is function to open popHTML window.
  8257.         if (EBGlobalManager_CT2384137.IsFunctionNotLink(strURL)) {
  8258.             var oGadgetData = EBGlobalManager_CT2384137.GetGadgetInfoFromLink(strURL, oEvent, strParentId);
  8259.             var popHtmlData = new oToolbar_CT2384137.toolbarDataParsing.dataObjects.PopHtml();
  8260.             popHtmlData.popHtmlUrl = oGadgetData.url;
  8261.             popHtmlData.width = oGadgetData.width;
  8262.             popHtmlData.height = oGadgetData.height;
  8263.             popHtmlData.parentElement = oEvent.target;
  8264.             popHtmlData.openPositionType = popHtmlData.openPositionTypes.alignment;
  8265.             popHtmlData.openPositionData.vertical = popHtmlData.openPositionTypes.verticalAlignmentBottom;
  8266.             popHtmlData.isUser = (isUser) ? true : false;
  8267.             popHtmlData.componentId = strAncestorId;
  8268.             popHtmlData.elementId = strCompId;
  8269.             popHtmlData.compType = strCompType;
  8270.             popHtmlData.source = strSource;
  8271.             popHtmlData.gadgetType = EBGadgetManager_CT2384137.GADGET_TYPE_REGULAR;
  8272.             popHtmlData.titleIconUrl = oGadgetData.titleIcon;
  8273.             popHtmlData.title = oGadgetData.title;
  8274.  
  8275.             EBGadgetManager_CT2384137.OpenGadget(popHtmlData);
  8276.         }
  8277.         //check for post
  8278.         else if (strPostParams || oUploadStream)
  8279.             this.LoadURLPostData(strURL, strPostParams, strTarget, oUploadStream);
  8280.  
  8281.         else {
  8282.             switch (strTarget) {
  8283.                 case "TAB":
  8284.                 case "NEW":
  8285.                     EBWeb_CT2384137.LoadURLInNewTab(strURL);
  8286.                     break;
  8287.                 case "BLANK":
  8288.                     EBWeb_CT2384137.LoadURLInNewWindow(strURL);
  8289.                     break;
  8290.                 default:
  8291.                     EBWeb_CT2384137.LoadURL(strURL);
  8292.                     break;
  8293.             }
  8294.         }
  8295.     },
  8296.  
  8297.     LoadURLPostData: function(strPostURL, strPostParams, strTarget, oUploadStream) {
  8298.         var objMimeStream
  8299.  
  8300.         if (!oUploadStream)
  8301.             objMimeStream = EBWeb_CT2384137.SetupMimeStream(strPostParams);
  8302.         else
  8303.             objMimeStream = oUploadStream;
  8304.  
  8305.         if (strTarget == "TAB") {
  8306.             //first load a blank tab
  8307.             EBWeb_CT2384137.LoadURLInNewTab('');
  8308.         }
  8309.         else if (strTarget == "NEW") {
  8310.             //first load a blank window
  8311.             //EBWeb_CT2384137.LoadURLInNewWindow('');
  8312.             EBWeb_CT2384137.LoadURLInNewTab('');
  8313.         }
  8314.  
  8315.         //login to the url using the mimeStream
  8316.         getBrowser().webNavigation.loadURI(strPostURL,
  8317.                                             Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE,
  8318.                                             null,
  8319.                                             objMimeStream,
  8320.                                             null);
  8321.     }
  8322. };
  8323. function EBLoadToolbar_CT2384137() {
  8324.     
  8325.     if (!EBActionManager_CT2384137.IsToolbarShown()) return;
  8326.         
  8327.     //set identifier to this window
  8328.     gBrowser.ebWindowId_CT2384137 = Math.random().toString();
  8329.  
  8330.     setTimeout(function() { EBAlertManager_CT2384137.RunAlert(); }, 100);
  8331.     setTimeout(function() { EBToolbarManager_CT2384137.onload(); }, 120);
  8332. };
  8333. //progressive listener of the main browser (actually the all toolbar)
  8334. var EBMainBrowserListener_CT2384137 =
  8335. {
  8336.     prevUrl: '',
  8337.  
  8338.     QueryInterface: function(aIID) {
  8339.         if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
  8340.             aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
  8341.             aIID.equals(Components.interfaces.nsISupports))
  8342.             return this;
  8343.         throw Components.results.NS_NOINTERFACE;
  8344.     },
  8345.  
  8346.     onStateChange: function(aProgress, aRequest, aFlag, aStatus) {
  8347.         var strURL = (aRequest) ? aRequest.name : '';
  8348.  
  8349.         /* TODO use when will be needed
  8350.         if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT) {
  8351.         }*/
  8352.  
  8353.         //navigate start event
  8354.         if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_START) {
  8355.             var aSubject = EBObserversManager_CT2384137.GetSubject(gBrowser.ebWindowId_CT2384137);
  8356.             aSubject.url = strURL;
  8357.             EBObserversManager_CT2384137.NotifyCustomObserver(aSubject,
  8358.                                                             EBObserversManager_CT2384137.ToolbarEventsTopic,
  8359.                                                             EBObserversManager_CT2384137.ToolbarEventsData.NavigateComplete);
  8360.             if (EBActionManager_CT2384137.IsToolbarMC() && EBActionManager_CT2384137.IsToolbarShown())
  8361.                 EBMCManager_CT2384137.OnBeforeNavigate(strURL);
  8362.         }
  8363.  
  8364.         //document complete event
  8365.         if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP) {
  8366.             if (strURL == gBrowser.contentDocument.location.href) {
  8367.                 var aSubject = EBObserversManager_CT2384137.GetSubject(gBrowser.ebWindowId_CT2384137);
  8368.                 aSubject.url = strURL;
  8369.                 EBObserversManager_CT2384137.NotifyCustomObserver(aSubject,
  8370.                                                             EBObserversManager_CT2384137.ToolbarEventsTopic,
  8371.                                                             EBObserversManager_CT2384137.ToolbarEventsData.DocumentComplete);
  8372.             }
  8373.  
  8374.             EBActionManager_CT2384137.DocumentComplete();
  8375.  
  8376.             if (EBActionManager_CT2384137.IsToolbarMC() && aFlag != 65552)
  8377.                 EBMCManager_CT2384137.DocumentComplete();
  8378.  
  8379.             //notify the secondary search manager
  8380.             EBSecondarySearchManager_CT2384137.onDocCompleted(strURL);
  8381.  
  8382.             //notify toggle components
  8383.             EBToggleComponentManager_CT2384137.DocumentComplete(aProgress);
  8384.  
  8385.             //check the toolbar api
  8386.             EBToolbarApiManager_CT2384137.CheckPage(getBrowser());
  8387.         }
  8388.  
  8389.         return 0;
  8390.     },
  8391.     // This fires when the location bar changes i.e load event is confirmed
  8392.     // or when the user switches tabs
  8393.     onLocationChange: function(aProgress, aRequest, aURI) {
  8394.         var strURL = (aURI) ? aURI.spec : "";
  8395.  
  8396.         // code for switch tab event
  8397.         if (!aProgress.isLoadingDocument || !strURL) {
  8398.             var aSubject = EBObserversManager_CT2384137.GetSubject(gBrowser.ebWindowId_CT2384137);
  8399.             aSubject.url = strURL;
  8400.             EBObserversManager_CT2384137.NotifyCustomObserver(aSubject,
  8401.                                                                 EBObserversManager_CT2384137.ToolbarEventsTopic,
  8402.                                                                 EBObserversManager_CT2384137.ToolbarEventsData.TabChange);
  8403.         }
  8404.  
  8405.         EBToggleComponentManager_CT2384137.TabChange(aProgress);
  8406.         EBHighlighterManager_CT2384137.TabChange(aProgress);
  8407.  
  8408.         //check suggests keywords
  8409.         EBSuggestsManager_CT2384137.CheckSuggests();
  8410.  
  8411.         //check the toolbar api
  8412.         EBToolbarApiManager_CT2384137.CheckPage(getBrowser());
  8413.  
  8414.         if (EBActionManager_CT2384137.IsToolbarMC() && strURL && this.prevUrl != strURL) {
  8415.             this.prevUrl = strURL;
  8416.             EBMCManager_CT2384137.LocationChange(strURL);
  8417.         }
  8418.  
  8419.         return 0;
  8420.     },
  8421.  
  8422.     // For definitions of the remaining functions see XulPlanet.com
  8423.     onSecurityChange: function(aProgress, aRequest, aState) {
  8424.         //check the toolbar api
  8425.         EBToolbarApiManager_CT2384137.CheckPage(getBrowser());
  8426.         return 0;
  8427.     },
  8428.     onProgressChange: function() { return 0; },
  8429.     onStatusChange: function(webProgress, request, status, message) {
  8430.         //check the toolbar api
  8431.         EBToolbarApiManager_CT2384137.CheckPage(getBrowser());
  8432.         return 0;
  8433.     },
  8434.     onLinkIconAvailable: function() { return 0; }
  8435. };
  8436. var EBObserversManager_CT2384137 = 
  8437. {
  8438.     NSIObserverService        : Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces["nsIObserverService"]),
  8439.     
  8440.     ArrObservers           : null,
  8441.     
  8442.     Delimiter               : '!EBObserverDelim!',
  8443.     
  8444.     ToolbarEventsTopic   : 'Topic_ConduitToolbar_CT2384137',
  8445.     
  8446.     ToolbarEventsData:
  8447.     {
  8448.         NavigateComplete: 'NavigateComplete',
  8449.         DocumentComplete: 'DocumentComplete',
  8450.         SearchTermChanged: 'SearchTermChanged',
  8451.         TabChange: 'TabChange',
  8452.         EBGlobalKeyChanged: 'GlobalStorageChange'
  8453.     },
  8454.     
  8455.     Register : function()
  8456.     {
  8457.         //add installation observer
  8458.         EBInstallationObserver_CT2384137.register();
  8459.         
  8460.         //all toolbar activity observer
  8461.         EBToolbarObserver_CT2384137.register();    
  8462.     },
  8463.     
  8464.     UnRegister : function()
  8465.     {
  8466.         //remove installation observer
  8467.         EBInstallationObserver_CT2384137.unregister();
  8468.         
  8469.         //remove custom observers
  8470.         try
  8471.         {
  8472.             if(this.ArrObservers && this.ArrObservers.length > 0)
  8473.                 for(var i=0; i<this.ArrObservers.length; i++)
  8474.                     this.ArrObservers[i].unregister();
  8475.         }
  8476.         catch(e)
  8477.         {
  8478.             EBLogging_CT2384137.LogToConsole(e);
  8479.         }
  8480.  
  8481.         this.ArrObservers = null;
  8482.     },
  8483.     
  8484.     RegisterCustomObserver : function(objObserver)
  8485.     {
  8486.         //lazy init
  8487.         if(!this.ArrObservers)
  8488.             this.ArrObservers = new Array();
  8489.         
  8490.         //save observer to unregister it later on windows unload
  8491.         this.ArrObservers.push(objObserver);
  8492.  
  8493.         this.NSIObserverService.addObserver(objObserver, objObserver.Topic, false);
  8494.     },
  8495.     
  8496.     NotifyCustomObserver : function(aSubject, strTopic, oData)
  8497.     {
  8498.         this.NSIObserverService.notifyObservers(aSubject, strTopic, oData);
  8499.     },
  8500.     
  8501.     EncodeData : function()
  8502.     {
  8503.         if(arguments.length == 0)
  8504.             return;
  8505.         
  8506.         var arrData = new Array();
  8507.         for(var i=0; i<arguments.length; arrData.push(arguments[i]), i++);
  8508.         
  8509.         var strData = arrData.join(this.Delimiter);
  8510.         
  8511.         return strData;
  8512.     },
  8513.     
  8514.     DecodeData : function(strData)
  8515.     {
  8516.         return strData.split(this.Delimiter);
  8517.     },
  8518.     
  8519.     GetSubject: function(strWindowId)
  8520.     {
  8521.         var objSubject = new Object();
  8522.         objSubject.wrappedJSObject = objSubject;
  8523.         objSubject.windowId = strWindowId;
  8524.         return objSubject;
  8525.     }
  8526. }
  8527.  
  8528.  
  8529.  
  8530.  
  8531. //observe the installation process of the extensions
  8532. //trigger when:
  8533. //install extension
  8534. //uninstall extension
  8535. //enable extension
  8536. //disable extension
  8537. //upgrade extension
  8538. //cancel extension
  8539.  
  8540. var EBInstallationObserver_CT2384137 =
  8541. {
  8542.     ACTION_REQUESTED_TOPIC: "em-action-requested",
  8543.     ITEM_INSTALLED: "item-installed",
  8544.     ITEM_UPGRADED: "item-upgraded",
  8545.     ITEM_UNINSTALLED: "item-uninstalled",
  8546.     ITEM_ENABLED: "item-enabled",
  8547.     ITEM_DISABLED: "item-disabled",
  8548.     ITEM_CANCEL: "item-cancel-action",
  8549.  
  8550.  
  8551.     register: function() {
  8552.         EBObserversManager_CT2384137.NSIObserverService.addObserver(this, this.ACTION_REQUESTED_TOPIC, false);
  8553.     },
  8554.  
  8555.     unregister: function() {
  8556.         EBObserversManager_CT2384137.NSIObserverService.removeObserver(this, this.ACTION_REQUESTED_TOPIC);
  8557.     },
  8558.  
  8559.     observe: function(aSubject, aTopic, aData) {
  8560.         try {
  8561.             if (aData == this.ITEM_UNINSTALLED) {
  8562.                 var objExtensionItem = aSubject.QueryInterface(Components.interfaces.nsIUpdateItem);
  8563.  
  8564.                 if (objExtensionItem.id == EBGlobalConsts_CT2384137.GUID) {
  8565.                     EBLogging_CT2384137.LogToConsole("Initiate uninstall sequence");
  8566.                     EBUninstallManager_CT2384137.PostUninstallToolbar();
  8567.                 }
  8568.             }
  8569.  
  8570.         }
  8571.         catch (err) {
  8572.             EBLogging_CT2384137.LogToConsole(err, "Uninstall Error");
  8573.         }
  8574.     }
  8575. };
  8576.  
  8577. var EBToolbarObserver_CT2384137 = 
  8578. {
  8579.     
  8580.     Topic   : 'Topic_ConduitToolbar_CT2384137',
  8581.     
  8582.     Action  :
  8583.     {
  8584.         RefreshToolbar : 'RefreshToolbar'
  8585.     },
  8586.     
  8587.     observe: function(aSubject, aTopic, aData)
  8588.     {    
  8589.         switch(aData)
  8590.         {
  8591.             case this.Action.RefreshToolbar:
  8592.                 //Add here functions to invoke on toolbar refresh
  8593.                 break;
  8594.         }
  8595.     },
  8596.     
  8597.     register : function()
  8598.     {
  8599.         EBObserversManager_CT2384137.RegisterCustomObserver(this);
  8600.     },
  8601.     
  8602.     unregister : function()
  8603.     {
  8604.         EBObserversManager_CT2384137.NSIObserverService.removeObserver(this, this.Topic);
  8605.     }
  8606. };
  8607. var EBSearchFromAddressBar_CT2384137 =
  8608. {
  8609.     addressBarEngineURL: 'http://search.conduit.com/ResultsExt.aspx?ctid=CT2384137&q=',
  8610.     addressBarUrlPrefName: 'keyword.URL',
  8611.     addressBarEnabledPrefName: 'keyword.enabled',
  8612.     addressBarSelectedCtid: 'keywordURLSelectedCTID',
  8613.  
  8614.     firstTime: function(strUrl, bIsSet) {
  8615.         //save old one, if not saved before
  8616.         this.backup();
  8617.  
  8618.         //save the new url
  8619.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarUrl, strUrl);
  8620.  
  8621.         //set new url
  8622.         if (bIsSet) {
  8623.             this.setAddressBarSearchUrl(strUrl);
  8624.             this.setSelectedCtid();
  8625.             this.setEnabledAddressBarSearch();
  8626.             
  8627.         }
  8628.  
  8629.         EBInitializeToolbarManager_CT2384137.AddMeToInstalledToolbarsList(EBPreferenceConsts_CT2384137.ToolbarsList2);
  8630.     },
  8631.  
  8632.     setAddressBarSearchUrl: function(strUrl) {
  8633.         EBPreferenceService_CT2384137.SetPref(this.addressBarUrlPrefName, strUrl);
  8634.     },
  8635.     
  8636.     setSelectedCtid: function() {
  8637.         EBGlobalPreferenceManager_CT2384137.SetPref(this.addressBarSelectedCtid, EBGlobalConsts_CT2384137.ToolbarCTID);
  8638.     },
  8639.     
  8640.     removeSelectedCtid: function() {
  8641.         EBGlobalPreferenceManager_CT2384137.SetPref(this.addressBarSelectedCtid, null);
  8642.     },
  8643.  
  8644.     setEnabledAddressBarSearch: function() {
  8645.         var bIsEnabled = EBPreferenceService_CT2384137.GetPref(this.addressBarEnabledPrefName);
  8646.  
  8647.         if (!bIsEnabled)
  8648.             EBPreferenceService_CT2384137.SetPref(this.addressBarEnabledPrefName, true);
  8649.     },
  8650.         
  8651.     getUrl: function() {
  8652.         var strUrl = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarUrl);
  8653.         if (!strUrl)
  8654.             strUrl = this.addressBarEngineURL;
  8655.  
  8656.         return strUrl;
  8657.     },
  8658.  
  8659.     changeState: function(bIsEnabled) {
  8660.         if (bIsEnabled) {
  8661.             var strUrl = this.getUrl();
  8662.             this.setAddressBarSearchUrl(strUrl);
  8663.             this.setSelectedCtid();
  8664.         }
  8665.         else {
  8666.             this.setToDefaultSearch();
  8667.             this.removeSelectedCtid();
  8668.         }
  8669.     },
  8670.  
  8671.     //backup only once per all toolbars installations
  8672.     backup: function() {
  8673.         var strSearchFromAddressOldUrl = EBPreferenceService_CT2384137.GetPref(this.addressBarUrlPrefName);
  8674.  
  8675.         //save the original value if not saved before
  8676.         if (!EBGlobalPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.SearchFromAddressBarSavedUrl)) {
  8677.             EBGlobalPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarSavedUrl, strSearchFromAddressOldUrl);
  8678.         }
  8679.     },
  8680.  
  8681.     //restore to original, executed by the last toolbar uninstall
  8682.     restoreOriginal: function() {
  8683.         var strSavedUrl = EBGlobalPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarSavedUrl);
  8684.         this.setAddressBarSearchUrl(strSavedUrl);
  8685.     },
  8686.     
  8687.     setToDefaultSearch: function() {
  8688.         this.restoreOriginal();
  8689.     },
  8690.     
  8691.     restorePrevious: function() {
  8692.         var strCTIDs = EBGlobalPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.ToolbarsList2);
  8693.         var arrCTIDs = strCTIDs.split(",");
  8694.         var strCTID = arrCTIDs.pop();
  8695.         var strPrefName = strCTID + "." + EBPreferenceConsts_CT2384137.SearchFromAddressBarUrl;
  8696.         var strUrl = EBPreferenceService_CT2384137.GetPref(strPrefName);
  8697.         this.setAddressBarSearchUrl(strUrl);
  8698.     },
  8699.  
  8700.     restoreOnUninstall: function() {
  8701.         var strPrefName = EBPreferenceConsts_CT2384137.ToolbarsList2;
  8702.         EBUninstallManager_CT2384137.RemoveMeFromInstalledToolbarsList(strPrefName);
  8703.  
  8704.         if (EBUninstallManager_CT2384137.IsLastToolbar(strPrefName))
  8705.             this.restoreOriginal();
  8706.         else if (this.isEnabled())
  8707.             this.restorePrevious();
  8708.     },
  8709.  
  8710.     isEnabled: function() {
  8711.         return EBGlobalPreferenceManager_CT2384137.GetPref(this.addressBarSelectedCtid) == EBGlobalConsts_CT2384137.ToolbarCTID;
  8712.     },
  8713.  
  8714.     updateFromSettings: function(strUrl) {
  8715.         strUrl = this.convertSettingsUrl(strUrl);
  8716.         
  8717.         //save the new url
  8718.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarUrl, strUrl);
  8719.     },
  8720.  
  8721.     convertSettingsUrl: function(strUrl) {
  8722.         strUrl = strUrl.replace(/MYSEARCHTERM/g, '');
  8723.         strUrl = strUrl.replace(/EB_CTID/g, EBActionManager_CT2384137.GetCTID());
  8724.  
  8725.         //fix server issue, the parameter q= must be at the end of the string
  8726.         if (strUrl.indexOf("q=&") != -1) {
  8727.             strUrl = strUrl.replace(/q=&/, "") + "&q=";
  8728.         }
  8729.         return strUrl;
  8730.     },
  8731.  
  8732.     isThisToolbarRegisteredWithDefault: function() {
  8733.         var strUrl = EBPreferenceService_CT2384137.GetPref(this.addressBarUrlPrefName);
  8734.         return strUrl == this.addressBarEngineURL;
  8735.     },
  8736.     
  8737.     onload: function(){
  8738.         var selectedCtid  = EBGlobalPreferenceManager_CT2384137.GetPref(this.addressBarSelectedCtid);
  8739.         if(!selectedCtid) return;
  8740.         
  8741.         if(this.isToolbarLive(selectedCtid)){
  8742.             this.setAddressBarSearchUrl(this.getToolbarSearchFromAddressBarUrl(selectedCtid));
  8743.             return;
  8744.         }
  8745.         
  8746.         var nextToolbarSerchUrl = this.getNextLiveToolbarSearchUrl(EBPreferenceConsts_CT2384137.ToolbarsList2);
  8747.         
  8748.         if (nextToolbarSerchUrl)
  8749.             this.setAddressBarSearchUrl(nextToolbarSerchUrl); 
  8750.         else
  8751.             this.setAddressBarSearchUrl(EBGlobalPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarSavedUrl));
  8752.     },
  8753.     
  8754.     onunload: function() {
  8755.         this.restoreOriginal();
  8756.     },
  8757.  
  8758.     getToolbarSearchFromAddressBarUrl: function(ctid)
  8759.     {
  8760.         var prefName = ctid + "." + EBPreferenceConsts_CT2384137.SearchFromAddressBarUrl;
  8761.         return EBPreferenceService_CT2384137.GetPref(prefName);
  8762.     },
  8763.     
  8764.     isToolbarLive: function(ctid){
  8765.         var activeToolbarsList = EBActionManager_CT2384137.GetEBToolbarsCTID();
  8766.         var searchFromAddressBarUrl;
  8767.         for (var i = 0; i < activeToolbarsList.length; i++) {
  8768.             if(activeToolbarsList[i].originalCTID == ctid)
  8769.                 return true;
  8770.         }
  8771.         
  8772.         return false;
  8773.     },
  8774.     
  8775.     //get the first live toolbar
  8776.     getNextLiveToolbarSearchUrl: function(toolbarListPref){
  8777.         var toolbarList = EBGlobalPreferenceManager_CT2384137.GetPref(toolbarListPref);
  8778.         if(!toolbarList) return null;
  8779.         // split the list to array
  8780.         var arrToolbars = toolbarList.split(',');
  8781.         var searchFromAddressBarUrl;  
  8782.         for (var i = 0; i < arrToolbars.length; i++){       
  8783.             searchFromAddressBarUrl = this.getToolbarSearchFromAddressBarUrl(arrToolbars[i]);
  8784.             // if this live toolbar
  8785.             if (this.isToolbarLive(arrToolbars[i]))
  8786.                  return searchFromAddressBarUrl;
  8787.         }
  8788.         //didn't find any live toolbar
  8789.         return null; 
  8790.     }
  8791. };
  8792. var EBSecondarySearchManager_CT2384137 =
  8793. {
  8794.     TimeoutSecondary: null,
  8795.     IsSearchExecuted: false,
  8796.     SearchUrl: '',
  8797.     EngineId: '',
  8798.  
  8799.     //public
  8800.     onSearchStarted: function(objSecondarySearch, evnt, strPostParams, strSearchTerm, strSearchUrl) {
  8801.         if (objSecondarySearch == null)
  8802.             return;
  8803.  
  8804.         this.SearchStartTime = Date.parse(Date());
  8805.         clearTimeout(this.TimeoutSecondary);
  8806.  
  8807.         this.IsSearchExecuted = true;
  8808.         this.SearchUrl = strSearchUrl;
  8809.         this.EngineId = objSecondarySearch.engineId;
  8810.  
  8811.         var oCheckIfLoaded = function() {
  8812.             if (EBSecondarySearchManager_CT2384137.IsSearchExecuted) {
  8813.                 var strSearchUrl = objSecondarySearch.prefix.replace(objSecondarySearch.searchTermToReplace, strSearchTerm);
  8814.                 strSearchUrl = EBActionManager_CT2384137.ConvertAliasesUrl(strSearchUrl);
  8815.                 EBSecondarySearchManager_CT2384137.SearchUrl = "";
  8816.                 EBSecondarySearchManager_CT2384137.IsSearchExecuted = false;
  8817.                 EBLinkManager_CT2384137.LoadLinkURL(evnt, strSearchUrl, false, strPostParams);
  8818.             }
  8819.         };
  8820.  
  8821.         this.TimeoutSecondary = setTimeout(oCheckIfLoaded, this.getSecondarySearchTimeout(objSecondarySearch.engineId, objSecondarySearch.interval));
  8822.     },
  8823.  
  8824.     //public
  8825.     onDocCompleted: function(strUrl) {
  8826.         clearTimeout(this.TimeoutSecondary);
  8827.         if (strUrl == this.SearchUrl && this.IsSearchExecuted) {
  8828.             var iSearchTime = Date.parse(Date()) - this.SearchStartTime;
  8829.             this.setNewData(this.EngineId, iSearchTime);
  8830.         }
  8831.         else {
  8832.             this.IsSearchExecuted = false;
  8833.             this.SearchUrl = '';
  8834.         }
  8835.     },
  8836.  
  8837.     //private
  8838.     searchesCount: function(strEngineId, iCount) {
  8839.         var prefSearchesCount = EBPreferenceConsts_CT2384137.SearchesCount + '.' + strEngineId;
  8840.  
  8841.         //get
  8842.         if (typeof iCount == 'undefined') {
  8843.             var iCnt = EBToolbarPreferenceManager_CT2384137.GetPref(prefSearchesCount);
  8844.             if (!iCnt) iCnt = 0;
  8845.             return iCnt;
  8846.         }
  8847.         //set
  8848.         else
  8849.             EBToolbarPreferenceManager_CT2384137.SetPref(prefSearchesCount, iCount);
  8850.     },
  8851.  
  8852.     //private
  8853.     searchesAverage: function(strEngineId, iAvg) {
  8854.         var prefSearchTimeAverage = EBPreferenceConsts_CT2384137.SearchTimeAverage + '.' + strEngineId;
  8855.  
  8856.         //get
  8857.         if (typeof iAvg == 'undefined') {
  8858.             var iAverage = EBToolbarPreferenceManager_CT2384137.GetPref(prefSearchTimeAverage);
  8859.             if (!iAverage) iAverage = 0;
  8860.             return iAverage;
  8861.         }
  8862.         //set
  8863.         else
  8864.             EBToolbarPreferenceManager_CT2384137.SetPref(prefSearchTimeAverage, iAvg);
  8865.     },
  8866.  
  8867.     //private
  8868.     setNewData: function(strEngineId, iSearchTime) {
  8869.         //get data from prefs
  8870.         var iCount = this.searchesCount(strEngineId);
  8871.         var iAvg = this.searchesAverage(strEngineId);
  8872.  
  8873.         //calculate new average
  8874.         iAvg = (iAvg * iCount + iSearchTime) / (iCount + 1)
  8875.  
  8876.         //set new data to prefs
  8877.         this.searchesCount(strEngineId, iCount + 1);
  8878.         this.searchesAverage(strEngineId, iAvg);
  8879.     },
  8880.  
  8881.     //private
  8882.     getSecondarySearchTimeout: function(strEngineId, iMinTimeout) {
  8883.         var iAvg = this.searchesAverage(strEngineId);
  8884.         if (iAvg == 0)
  8885.             return iMinTimeout * 2;
  8886.         else if (iAvg < iMinTimeout)
  8887.             return iMinTimeout;
  8888.         else
  8889.             return (1 + iMinTimeout / iAvg) * iAvg;
  8890.     }
  8891. }
  8892. var EBSelectToSearchBox_CT2384137 =
  8893. {
  8894.     getTextFromClick: function(parent, offset, target) {
  8895.         if (parent.parentNode != target || parent.nodeType != Node.TEXT_NODE) return;
  8896.  
  8897.         var container = parent.parentNode;
  8898.         if (container) {
  8899.             var foundNode = false;
  8900.             for (var i = container.firstChild; i != null; i = i.nextSibling) {
  8901.                 if (i == parent) {
  8902.                     foundNode = true;
  8903.                     break;
  8904.                 }
  8905.             }
  8906.             if (!foundNode) return;
  8907.         }
  8908.  
  8909.         var range = parent.ownerDocument.createRange();
  8910.         range.selectNode(parent);
  8911.         var str = range.toString();
  8912.  
  8913.         if (offset < 0 || offset >= str.length) return;
  8914.  
  8915.         var start = offset;
  8916.  
  8917.         while (str.charAt(start) != " " && start > 0) {
  8918.             start--;
  8919.         }
  8920.  
  8921.         var end = offset + 1;
  8922.  
  8923.         while (str.charAt(end) != " " && end < str.length) {
  8924.             end++;
  8925.         }
  8926.  
  8927.         var text = str.substring(start, end);
  8928.         return text;
  8929.     },
  8930.  
  8931.     getSelectionText: function(event) {
  8932.         var str = "";
  8933.         if (!event.rangeParent) return true;
  8934.  
  8935.         if (getBrowser().contentWindow.getSelection())
  8936.             str = getBrowser().contentWindow.getSelection().toString();
  8937.  
  8938.         var node = document.commandDispatcher.focusedElement;
  8939.         try {
  8940.             if (node &&
  8941.                 'selectionStart' in node &&
  8942.                 node.selectionStart != node.selectionEnd &&
  8943.                 node.type != "password" &&
  8944.                 node.nodeName != "html:input") {
  8945.                 var offsetStart = Math.min(node.selectionStart, node.selectionEnd);
  8946.                 var offsetEnd = Math.max(node.selectionStart, node.selectionEnd);
  8947.                 str = node.value.substr(offsetStart, offsetEnd - offsetStart);
  8948.             }
  8949.             else if (node && node.nodeName == "html:input")
  8950.                 str = EBComponentsConsts_CT2384137.DontChangeTerm;
  8951.         }
  8952.         catch (ex) { }
  8953.  
  8954.         return str;
  8955.     },
  8956.  
  8957.     onmouseup: function(event) {
  8958.         var isEnabled = EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.EnableClickToSearchBox) ?
  8959.             EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.EnableClickToSearchBox) : true;
  8960.  
  8961.         if (event.button != 0 || !isEnabled) return;
  8962.  
  8963.  
  8964.         //check if there was selection made
  8965.         var text = this.getSelectionText(event);
  8966.  
  8967.         if (text == null) text = "";
  8968.  
  8969.         if (text != EBComponentsConsts_CT2384137.DontChangeTerm &&
  8970.             (text != "" || !EBSearchBoxConsts_CT2384137.IsUserInput)) {
  8971.             text = EBGlobalManager_CT2384137.Trim(text);
  8972.             if (text != null) {
  8973.                 //take the text part up to enter
  8974.                 try {
  8975.                     text = text.substr(0, 255);
  8976.                     text = text.replace(/\r\n/g, "");
  8977.                     text = text.replace(/\n/g, "");
  8978.                 }
  8979.                 catch (ex) {
  8980.                     EBLog(ex, "select to search box");
  8981.                 }
  8982.  
  8983.                 EBActionManager_CT2384137.SetToolbarSearchTerm(text);
  8984.                 EBSearchBoxConsts_CT2384137.IsUserInput = false;
  8985.             }
  8986.         }
  8987.     }
  8988. };
  8989. function EBSuggestObject_CT2384137(strDomain,strSearchParam,strOutputCharset)
  8990. {
  8991.     this.domain            = strDomain;
  8992.     this.searchParam    = strSearchParam;    
  8993.     this.outputCharset    = strOutputCharset;
  8994. }
  8995.  
  8996.  
  8997. var EBSuggestsManager_CT2384137 = 
  8998. {
  8999.     CheckSuggests : function()
  9000.     {
  9001.         var arrToolbarSuggests = EBToolbarManager_CT2384137.dataToolbarObject.ToolbarSuggests;
  9002.         
  9003.         if(arrToolbarSuggests)
  9004.         {
  9005.             for(var i=0;i<arrToolbarSuggests.length;i++)
  9006.             {
  9007.                 this.SetSuggest(arrToolbarSuggests[i]);
  9008.             }
  9009.         }
  9010.     },
  9011.     
  9012.     SetSuggest : function(ebSuggestObj)
  9013.     {
  9014.         var strKeyword = this.GetKeyword(ebSuggestObj)
  9015.         
  9016.         if(strKeyword)
  9017.             EBActionManager_CT2384137.SetToolbarSearchTerm(strKeyword);
  9018.     },
  9019.     
  9020.     GetKeyword : function(ebSuggestObj)
  9021.     {
  9022.         var strKeyword            = "";
  9023.         
  9024.         var DELIMITER_PARAMS    = '&';
  9025.         
  9026.         var strDomain            = ebSuggestObj.domain;
  9027.         var strSearchParam        = ebSuggestObj.searchParam;
  9028.         var strOutputCharset    = ebSuggestObj.outputCharset;
  9029.         
  9030.         //get the current url
  9031.         var strCurrentUrl = EBUrl_CT2384137.GetPageUrl();
  9032.         
  9033.         //check the current url with the suggest element
  9034.         if(strCurrentUrl.indexOf(strDomain) != -1)
  9035.         {
  9036.             //get the index of the search param
  9037.             var iIndexOfParam = strCurrentUrl.indexOf(strSearchParam);
  9038.             if(iIndexOfParam != -1)
  9039.             {
  9040.                 //get the url string from the search param till the end
  9041.                 var strUrlFromParam = strCurrentUrl.substring(iIndexOfParam + strSearchParam.length);
  9042.                 
  9043.                 //check if this is the keyword by getting the next delimiter params(usually '&')
  9044.                 var iIndexOfNextParam = strUrlFromParam.indexOf(DELIMITER_PARAMS);
  9045.                 if(iIndexOfNextParam != -1)
  9046.                     strKeyword = strUrlFromParam.substring(0,iIndexOfNextParam);
  9047.                 else
  9048.                     strKeyword = strUrlFromParam;
  9049.             }
  9050.         }
  9051.         
  9052.         strKeyword = this.ConvertKeyword(strKeyword,strOutputCharset);
  9053.         
  9054.         return strKeyword;
  9055.     },
  9056.     
  9057.     ConvertKeyword : function(strKeyword,strCharset)
  9058.     {
  9059.         if(strKeyword == "")
  9060.             return "";
  9061.             
  9062.         //convert the url spacing before!!! the main conversion itself.
  9063.         strKeyword = strKeyword.replace(/\+/g,' ');
  9064.  
  9065.         //convert the search keyword back from the url keyword to normal one
  9066.         strKeyword = unescape(strKeyword);
  9067.         strKeyword = EBFileIO_CT2384137.toUnicode(strCharset,strKeyword);
  9068.         
  9069.         //remove the site:<domain> from the keyword in case of site search
  9070.         if (strKeyword.indexOf("site:") != -1 && strKeyword.indexOf("site: ") == -1)
  9071.         {
  9072.             try
  9073.             {
  9074.                 var iStart = strKeyword.indexOf("site2:");
  9075.                 var iBlank = strKeyword.indexOf(" ",iStart);
  9076.                 strKeyword = strKeyword.substr(iBlank+1);
  9077.             }
  9078.             catch(ex)
  9079.             {}
  9080.         }
  9081.         return strKeyword;
  9082.     }
  9083.     
  9084.     
  9085. }
  9086. var EBToggleComponentConsts_CT2384137 =
  9087. {
  9088.     MODE_TEMPORARY: 'TEMPORARY',
  9089.     MODE_PERMANENT: 'PERMANENT'
  9090. };
  9091.  
  9092. var EBToggleComponentManager_CT2384137 =
  9093. {
  9094.     //Lazy initiation of the toggle components hash table
  9095.     ArrToggleComponents: null,
  9096.  
  9097.     OnToolbarRefresh: function() {
  9098.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  9099.                         .getService(Components.interfaces.nsIWindowMediator);
  9100.  
  9101.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  9102.         while (objEnumerator.hasMoreElements()) {
  9103.             var objWindow = objEnumerator.getNext();
  9104.             if (objWindow.EBToggleComponentManager_CT2384137.OnToolbarRefresh) {
  9105.                 try {
  9106.                     objWindow.EBToggleComponentManager_CT2384137.Clear();
  9107.                 }
  9108.                 catch (ex) { }
  9109.             }
  9110.         }
  9111.     },
  9112.  
  9113.     Clear: function() {
  9114.         this.ArrToggleComponents = null;
  9115.     },
  9116.  
  9117.     Init: function() {
  9118.         if (!this.ArrToggleComponents)
  9119.             this.ArrToggleComponents = new EBArrayHashObject_CT2384137();
  9120.     },
  9121.  
  9122.     InitComponent: function(obj) {
  9123.         this.Init();
  9124.  
  9125.         this.ArrToggleComponents.Add(obj.ComponentItem.UniqueCompID, obj);
  9126.  
  9127.         var bIsPressed = this.GetIsPressedStateFromPreferences(obj.ComponentItem.UniqueCompID);
  9128.  
  9129.         if (bIsPressed)
  9130.             obj.ToggleOn();
  9131.     },
  9132.  
  9133.     //Firefox Events
  9134.     DocumentComplete: function(aProgress) {
  9135.         if (!this.ArrToggleComponents)
  9136.             return;
  9137.  
  9138.         var objJSWrapped = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(aProgress.DOMWindow);
  9139.         var objComponent;
  9140.  
  9141.         for (var i = 0; i < this.ArrToggleComponents.Count(); i++) {
  9142.             objComponent = this.ArrToggleComponents.GetByIndex(i);
  9143.             if (objComponent.IsChecked) {
  9144.                 //if mode pemanent update without checking
  9145.                 if (objComponent.ComponentItem.mode == EBToggleComponentConsts_CT2384137.MODE_PERMANENT) {
  9146.                     if (!this.IsToSkip(aProgress.DOMWindow))
  9147.                         this.AddScript(objComponent.ComponentItem.scriptUrl, null, objJSWrapped);
  9148.                 }
  9149.                 //if mode temporary, check if selected on current window
  9150.                 else if (EBGlobalManager_CT2384137.GetBooleanAttribute(gBrowser.selectedBrowser, "a" + objComponent.ComponentItem.UniqueCompID, false)) {
  9151.                     if (!this.IsToSkip(aProgress.DOMWindow))
  9152.                         this.AddScript(objComponent.ComponentItem.scriptUrl, null, objJSWrapped);
  9153.                 }
  9154.             }
  9155.         }
  9156.     },
  9157.  
  9158.     TabChange: function(aProgress) {
  9159.         if (!this.ArrToggleComponents)
  9160.             return;
  9161.  
  9162.         var objJSWrapped = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(aProgress.DOMWindow);
  9163.         var objComponent;
  9164.  
  9165.         for (var i = 0; i < this.ArrToggleComponents.Count(); i++) {
  9166.             objComponent = this.ArrToggleComponents.GetByIndex(i);
  9167.  
  9168.             if (objComponent.ComponentItem.mode == EBToggleComponentConsts_CT2384137.MODE_TEMPORARY) {
  9169.                 if (objComponent.IsChecked && !EBGlobalManager_CT2384137.GetBooleanAttribute(gBrowser.selectedBrowser, "a" + objComponent.ComponentItem.UniqueCompID, false))
  9170.                     objComponent.ToggleOff();
  9171.                 else if (!objComponent.IsChecked && EBGlobalManager_CT2384137.GetBooleanAttribute(gBrowser.selectedBrowser, "a" + objComponent.ComponentItem.UniqueCompID, false))
  9172.                     objComponent.ToggleOn();
  9173.             }
  9174.         }
  9175.     },
  9176.  
  9177.     OnClick: function(event, UniqueCompID, compType) {
  9178.         objToggleComponent = this.ArrToggleComponents.GetByID(UniqueCompID);
  9179.  
  9180.         //usage
  9181.         if (objToggleComponent.IsChecked)
  9182.             EBUsageToggleComponent_CT2384137.OnClickOff(UniqueCompID, compType);
  9183.         else
  9184.             EBUsageToggleComponent_CT2384137.OnClickOn(UniqueCompID, compType);
  9185.  
  9186.         if (objToggleComponent.ComponentItem.mode == EBToggleComponentConsts_CT2384137.MODE_PERMANENT) {
  9187.             this.SetIsPressedStateFromPreferences(UniqueCompID, !objToggleComponent.IsChecked);
  9188.             this.BroadcastOnClick(UniqueCompID, objToggleComponent.IsChecked);
  9189.         }
  9190.         else
  9191.             this.OnClickOnCurrentTab(objToggleComponent);
  9192.     },
  9193.  
  9194.     BroadcastOnClick: function(compId, bIsChecked) {
  9195.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  9196.                         .getService(Components.interfaces.nsIWindowMediator);
  9197.  
  9198.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  9199.         while (objEnumerator.hasMoreElements()) {
  9200.             var objWindow = objEnumerator.getNext();
  9201.             if (objWindow.EBToggleComponentManager_CT2384137.OnClickOff &&
  9202.                 objWindow.EBToggleComponentManager_CT2384137.OnClickOn) {
  9203.                 try {
  9204.                     if (bIsChecked)
  9205.                         objWindow.EBToggleComponentManager_CT2384137.OnClickOff(compId);
  9206.                     else
  9207.                         objWindow.EBToggleComponentManager_CT2384137.OnClickOn(compId);
  9208.                 }
  9209.                 catch (ex) { }
  9210.             }
  9211.         }
  9212.  
  9213.     },
  9214.  
  9215.     //for mode temporary toggle components
  9216.     OnClickOnCurrentTab: function(objComponent) {
  9217.         var objSJWrapped = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(gBrowser.selectedBrowser.contentWindow);
  9218.  
  9219.         if (objComponent.IsChecked) {
  9220.             gBrowser.selectedBrowser.removeAttribute("a" + objComponent.ComponentItem.UniqueCompID)
  9221.             this.OnClickOff(objComponent.ComponentItem.UniqueCompID, objSJWrapped)
  9222.         }
  9223.         else {
  9224.             gBrowser.selectedBrowser.setAttribute("a" + objComponent.ComponentItem.UniqueCompID, true)
  9225.             this.OnClickOn(objComponent.ComponentItem.UniqueCompID, objSJWrapped)
  9226.         }
  9227.     },
  9228.  
  9229.     OnClickOff: function(compId, objJSWrapped) {
  9230.         objComponent = this.ArrToggleComponents.GetByID(compId);
  9231.         objComponent.ToggleOff();
  9232.  
  9233.         this.ScriptOff(objComponent.ComponentItem.scriptOff, objComponent.ComponentItem.scriptUrl, objJSWrapped);
  9234.     },
  9235.  
  9236.     OnClickOn: function(compId, objJSWrapped) {
  9237.         objComponent = this.ArrToggleComponents.GetByID(compId);
  9238.         objComponent.ToggleOn();
  9239.  
  9240.         this.AddScript(objComponent.ComponentItem.scriptUrl, objComponent.ComponentItem.scriptOn, objJSWrapped);
  9241.     },
  9242.  
  9243.  
  9244.     AddScript: function(strScriptSrc, strFunction, objJSWrapped) {
  9245.         //do not inject script into https sites.
  9246.         if (EBUrl_CT2384137.IsSecuredUrl()) return;
  9247.  
  9248.         var objScript;
  9249.         //fired from document complete or temporary toggle component
  9250.         if (objJSWrapped) {
  9251.             if (!this.IsScriptExists(objJSWrapped, strScriptSrc)) {
  9252.                 objScript = this.GetScriptObjectFromUrl(objJSWrapped, strScriptSrc);
  9253.                 this.AppendScriptIntoDocument(objJSWrapped, objScript, strScriptSrc);
  9254.             }
  9255.             else if (strFunction && strFunction in objJSWrapped)
  9256.                 objJSWrapped[strFunction].apply();
  9257.         }
  9258.         else {
  9259.             var arrTabs = EBGlobalManager_CT2384137.GetAllTabs();
  9260.             var arrJSObjects;
  9261.             for (var i = 0; i < arrTabs.length; i++) {
  9262.                 arrJSObjects = this.getAllBrowserObjects(arrTabs[i].contentWindow);
  9263.                 for (var j = 0; j < arrJSObjects.length; j++) {
  9264.                     objJSWrapped = arrJSObjects[j];
  9265.                     objScript = this.GetScriptObjectFromUrl(objJSWrapped, strScriptSrc);
  9266.                     if (this.IsScriptExists(objJSWrapped, strScriptSrc) && strFunction in objJSWrapped)
  9267.                         objJSWrapped[strFunction].apply();
  9268.                     else
  9269.                         this.AppendScriptIntoDocument(objJSWrapped, objScript, strScriptSrc);
  9270.                 }
  9271.             }
  9272.             //get all open tabs and inject the script
  9273.             //check if script exists, only execute function
  9274.         }
  9275.     },
  9276.  
  9277.     ScriptOff: function(strFunction, strScriptSrc, objJSWrapped) {
  9278.         //do not inject script into https sites.
  9279.         if (EBUrl_CT2384137.IsSecuredUrl()) return;
  9280.  
  9281.         if (objJSWrapped) {
  9282.             if (this.IsScriptExists(objJSWrapped, strScriptSrc) && strFunction in objJSWrapped)
  9283.                 objJSWrapped[strFunction].apply();
  9284.         }
  9285.         else {
  9286.             var arrTabs = EBGlobalManager_CT2384137.GetAllTabs();
  9287.  
  9288.             for (var i = 0; i < arrTabs.length; i++) {
  9289.                 objJSWrapped = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(arrTabs[i].contentWindow);
  9290.  
  9291.                 if (this.IsScriptExists(objJSWrapped, strScriptSrc) && strFunction in objJSWrapped)
  9292.                     objJSWrapped[strFunction].apply();
  9293.             }
  9294.         }
  9295.     },
  9296.  
  9297.     AppendScriptIntoDocument: function(objJSWrapped, objScript, strScriptSrc) {
  9298.         var objDoc = objJSWrapped.document;
  9299.         var objHead = objDoc.getElementsByTagName("head")[0];
  9300.         objHead.appendChild(objScript);
  9301.     },
  9302.  
  9303.     GetScriptObjectFromUrl: function(objJSWrapped, strScriptSrc) {
  9304.  
  9305.         var objScript = objJSWrapped.document.createElement('script');
  9306.         objScript.setAttribute('src', strScriptSrc);
  9307.         objScript.setAttribute('type', 'text/javascript');
  9308.  
  9309.         return objScript;
  9310.     },
  9311.  
  9312.     IsScriptExists: function(objJSWarpped, strScriptSrc) {
  9313.         var objHead = objJSWarpped.document.getElementsByTagName('head')[0];
  9314.         var arrScripts = objHead.getElementsByTagName('script');
  9315.  
  9316.         if (arrScripts.length == 0)
  9317.             return false;
  9318.  
  9319.         var objScript = null;
  9320.         var strSrc = '';
  9321.  
  9322.         for (var i = 0; i < arrScripts.length; i++) {
  9323.             objScript = arrScripts[i];
  9324.             strSrc = objScript.getAttribute('src');
  9325.  
  9326.             if (strSrc == strScriptSrc)
  9327.                 return true;
  9328.         }
  9329.  
  9330.         return false;
  9331.     },
  9332.  
  9333.     GetIsPressedStateFromPreferences: function(uniqueCompId) {
  9334.         var prefName = EBPreferenceConsts_CT2384137.ToggleComponentState + uniqueCompId;
  9335.         var bIsPressedState = EBToolbarPreferenceManager_CT2384137.GetPref(prefName, true);
  9336.  
  9337.         return bIsPressedState;
  9338.     },
  9339.  
  9340.     SetIsPressedStateFromPreferences: function(uniqueCompId, bState) {
  9341.         var prefName = EBPreferenceConsts_CT2384137.ToggleComponentState + uniqueCompId;
  9342.         var bIsPressedState = EBToolbarPreferenceManager_CT2384137.SetPref(prefName, bState, true);
  9343.     },
  9344.  
  9345.     IsToSkip: function(DomWindow) {
  9346.         var href = DomWindow.location.href;
  9347.         if (href == "about:blank")
  9348.             return true;
  9349.         else
  9350.             return false;
  9351.     },
  9352.  
  9353.     getAllBrowserObjects: function(DOMWindow) {
  9354.         var arrJSObjects = new Array();
  9355.         var mainJSObject = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(DOMWindow);
  9356.         arrJSObjects.push(mainJSObject);
  9357.  
  9358.         var arrFrames = mainJSObject.document.getElementsByTagName("frame");
  9359.         var i;
  9360.         if (arrFrames.length > 0) {
  9361.             for (i = 0; i < arrFrames.length; i++)
  9362.                 arrJSObjects.push(arrFrames[i].contentWindow);
  9363.         }
  9364.  
  9365.         arrFrames = mainJSObject.document.getElementsByTagName("iframe");
  9366.         if (arrFrames.length > 0) {
  9367.             for (i = 0; i < arrFrames.length; i++)
  9368.                 arrJSObjects.push(arrFrames[i].contentWindow);
  9369.         }
  9370.  
  9371.         return arrJSObjects;
  9372.     }
  9373. };
  9374. var EBUninstallManager_CT2384137 =
  9375. {
  9376.     IsShowUninstallPage: function() {
  9377.         var bValue;
  9378.  
  9379.         if (EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.IsOpenUninstallPage))
  9380.             bValue = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.IsOpenUninstallPage)
  9381.         else
  9382.             bValue = EBGlobalConsts_CT2384137.ShowUninstallPage;
  9383.  
  9384.         return bValue;
  9385.     },
  9386.  
  9387.     GetUninstallURL: function() {
  9388.         var strAdditional = 'Uninstall/?version=' + EBGlobalConsts_CT2384137.ToolbarVersion + '&platform=firefox';
  9389.  
  9390.         var strUninstallURL = EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  9391.         return strUninstallURL;
  9392.  
  9393.     },
  9394.  
  9395.     //set this pref key when uninstall the toolbar in order to clear all
  9396.     //the toolbar data when the window is closing!
  9397.     SetUninstallPreference: function() {
  9398.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.Uninstall, true);
  9399.     },
  9400.  
  9401.     //check if it is uninstall mode with the pref uninstall key:
  9402.     IsUninstall: function() {
  9403.         var strUninstallPrefName = EBPreferenceConsts_CT2384137.Uninstall;
  9404.         return EBToolbarPreferenceManager_CT2384137.HasUserValue(strUninstallPrefName);
  9405.     },
  9406.  
  9407.     ClearToolbarData: function() {
  9408.         if (EBGlobalConsts_CT2384137.IsAMO)
  9409.             this.ResetToDefaults();
  9410.             
  9411.         //clear all preferences:
  9412.         EBToolbarPreferenceManager_CT2384137.ClearAll();
  9413.  
  9414.         //remove toolbar main directory
  9415.         EBIOManager_CT2384137.DeleteToolbarDirectory();
  9416.  
  9417.         //remove suggest file with it's directory
  9418.         EBIOManager_CT2384137.DeleteSuggestDirectory();
  9419.  
  9420.         //update installed toolbars count
  9421.         this.RemoveMeFromInstalledToolbarsList(EBPreferenceConsts_CT2384137.ToolbarsList);
  9422.     },
  9423.  
  9424.     PostUninstallToolbar: function() {
  9425.         //set the uninstall preference
  9426.         //toolbar hidden
  9427.         if (!oToolbarManager_CT2384137) EBToolbarManager_CT2384137.onload();
  9428.  
  9429.         this.SetUninstallPreference();
  9430.         this.sendUninstallLog();
  9431.  
  9432.         if (this.IsShowUninstallPage()) {
  9433.             //load uninstall page
  9434.             var strUninstallURL = this.GetUninstallURL();
  9435.             setTimeout(function() { EBLinkManager_CT2384137.LoadLinkURL(null, strUninstallURL, "TAB", null); }, 1);
  9436.         }
  9437.     },
  9438.  
  9439.     sendUninstallLog: function() {
  9440.         var objData = new oToolbar_CT2384137.uninstallLog.uninstallLogDS(
  9441.                 EBGlobalConsts_CT2384137.ToolbarVersion,
  9442.                 EBGlobalConsts_CT2384137.ToolbarCTID,
  9443.                 EBActionManager_CT2384137.GetCTID(),
  9444.                 EBGlobalManager_CT2384137.GetOS(),
  9445.                 EBGlobalManager_CT2384137.GetBrowserNameAndVersion(),
  9446.                 EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.UserID)
  9447.                 );
  9448.  
  9449.         oToolbar_CT2384137.uninstallLog.manager.send(objData);
  9450.     },
  9451.  
  9452.     IsToClearToolbarData: function() {
  9453.         return this.IsUninstall()
  9454.                 &&
  9455.                EBGlobalManager_CT2384137.IsLastWindowInstance();
  9456.     },
  9457.  
  9458.     IsLastToolbar: function(strPrefName) {
  9459.         var strToolbarList = EBGlobalPreferenceManager_CT2384137.GetPref(strPrefName);
  9460.         if (strToolbarList)
  9461.             return false;
  9462.         else
  9463.             return true;
  9464.     },
  9465.  
  9466.     RemoveMeFromInstalledToolbarsList: function(strPrefName) {
  9467.         var strToolbarList = EBGlobalPreferenceManager_CT2384137.GetPref(strPrefName);
  9468.  
  9469.         if (!strToolbarList) return;
  9470.  
  9471.         var arrToolbars = strToolbarList.split(',');
  9472.  
  9473.         for (var i = 0; i < arrToolbars.length; i++)
  9474.             if (arrToolbars[i] == 'CT2384137')
  9475.             arrToolbars.splice(i, 1);
  9476.  
  9477.         strToolbarList = (arrToolbars.length == 0) ? '' : arrToolbars.join(',');
  9478.  
  9479.         EBGlobalPreferenceManager_CT2384137.SetPref(strPrefName, strToolbarList);
  9480.     },
  9481.  
  9482.     ClearCommonData: function() {
  9483.         EBGlobalPreferenceManager_CT2384137.ClearAll();
  9484.     },
  9485.  
  9486.     //after clearing the toolbar private data when the last browser closed we assure
  9487.     //that the toolbar is completley removed by closing all the remain Firefox windows:
  9488.     //like the extensions manager window
  9489.     CloseAllWindows: function() {
  9490.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  9491.                         .getService(Components.interfaces.nsIWindowMediator);
  9492.  
  9493.         var objEnumerator = objWindowsManager.getEnumerator(null);
  9494.         while (objEnumerator.hasMoreElements()) {
  9495.             var objWindow = objEnumerator.getNext();
  9496.             objWindow.close();
  9497.         }
  9498.     },
  9499.  
  9500.     ResetToDefaults: function() {
  9501.         //remove search engine
  9502.         try {
  9503.             var strDestPath = EBInitParams_CT2384137.getProfileSearchPluginsFolder();
  9504.  
  9505.             var oFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  9506.             oFile.initWithPath(strDestPath);
  9507.             oFile.appendRelativePath('conduit.xml');
  9508.             EBFileIO_CT2384137.unlink(oFile);
  9509.         }
  9510.         catch (ex) {
  9511.             EBLog(ex, "Unable to remove the search xml file");
  9512.         }
  9513.  
  9514.         //reset homepage
  9515.         EBInitParams_CT2384137.ResetHomepage();
  9516.     }
  9517. };
  9518.  
  9519.  
  9520. function EBUnloadToolbar_CT2384137(bCheckToolbarVisible)
  9521. {
  9522.     window.getBrowser().removeProgressListener(EBMainBrowserListener_CT2384137);
  9523.     EBToolbarManager_CT2384137.onunload(bCheckToolbarVisible);
  9524. };
  9525.  
  9526. //User components functions
  9527. var EBUserComponentsManager_CT2384137 =
  9528. {
  9529.     filename: 'UserAdditionalComponents.xml',
  9530.  
  9531.     //returns XML of User Additional Components
  9532.     GetXMLFromURL: function(strURL) {
  9533.         var oCallBackFunction = function(strXML, o) {
  9534.             strXML = EBXML_CT2384137.LegalizeEBXML(strXML);
  9535.             var xmlComponent = EBXML_CT2384137.GetXmlDocument(strXML);
  9536.             if (!xmlComponent) return false;
  9537.  
  9538.             EBUserComponentsManager_CT2384137.AddComponentToFile(xmlComponent.documentElement);
  9539.         };
  9540.  
  9541.         EBWeb_CT2384137.HTTPServerRequest(strURL, null, false, oCallBackFunction);
  9542.     },
  9543.  
  9544.     LoadFromFile: function() {
  9545.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(this.filename);
  9546.         var strXMLUserComponents = EBFileIO_CT2384137.read(oFile, EBGlobalConsts_CT2384137.DefaultCharset);
  9547.  
  9548.         //no file exists
  9549.         if (!strXMLUserComponents) return null;
  9550.  
  9551.         return EBXML_CT2384137.GetXmlDocument(strXMLUserComponents).documentElement;
  9552.     },
  9553.  
  9554.     SaveComponentsToFile: function(xmlComponents) {
  9555.         var strComponents = EBXML_CT2384137.GetStringXml(xmlComponents);
  9556.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(this.filename);
  9557.         EBFileIO_CT2384137.write(oFile, strComponents, "", EBGlobalConsts_CT2384137.DefaultCharset);
  9558.     },
  9559.  
  9560.     AddComponentToFile: function(xmlComponent) {
  9561.  
  9562.         var xmlUserComponents = this.LoadFromFile();
  9563.         var strXMLComponent = EBXML_CT2384137.GetStringXml(xmlComponent);
  9564.         var strXMLUserComponents = '';
  9565.         if (!xmlUserComponents) {
  9566.             strXMLUserComponents = "<USER_ADDITIONAL_COMPONENTS/>";
  9567.             xmlUserComponents = EBXML_CT2384137.GetXmlDocument(strXMLUserComponents);
  9568.             xmlUserComponents = xmlUserComponents.documentElement;
  9569.         }
  9570.         else {
  9571.             var componentId = this.GetComponentId(xmlComponent);
  9572.             if (this.isExists(xmlUserComponents, componentId))
  9573.                 return false;
  9574.         }
  9575.         xmlUserComponents.appendChild(xmlComponent);
  9576.         strXMLUserComponents = EBXML_CT2384137.GetStringXml(xmlUserComponents);
  9577.  
  9578.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(this.filename);
  9579.         EBFileIO_CT2384137.write(oFile, strXMLUserComponents, "", EBGlobalConsts_CT2384137.DefaultCharset);
  9580.         oToolbarManager_CT2384137.reloadUserComponents(true);
  9581.         return true;
  9582.     },
  9583.  
  9584.     RemoveFromFile: function(arrDeletedIds) {
  9585.         try {
  9586.             var strDeletedIds = '-' + arrDeletedIds.join('-') + '-';
  9587.  
  9588.             var xmlUserComponents = this.LoadFromFile();
  9589.             var compId = '';
  9590.  
  9591.             for (var i = xmlUserComponents.childNodes.length - 1; i >= 0; i--) {
  9592.                 compId = this.GetComponentId(xmlUserComponents.childNodes[i]);
  9593.  
  9594.                 if (strDeletedIds.indexOf('-' + compId + '-') != -1)
  9595.                     xmlUserComponents.removeChild(xmlUserComponents.childNodes[i]);
  9596.             }
  9597.  
  9598.             this.SaveComponentsToFile(xmlUserComponents);
  9599.         }
  9600.         catch (e) { }
  9601.     },
  9602.  
  9603.     GetComponentNodeByComponentID: function(xmlComponents, compID) {
  9604.         var arrElements = xmlComponents.getElementsByTagName('UNIQUE_COMP_ID');
  9605.         for (var i = 0; i < arrElements.length; i++) {
  9606.             if (EBXML_CT2384137.GetXmlNodeValue(arrElements.item(i)) == compID) {
  9607.                 return arrElements.item(i).parentNode;
  9608.             }
  9609.         }
  9610.     },
  9611.  
  9612.     RepositionComponents: function(arrPosition) {
  9613.         var xmlComponents = this.LoadFromFile()
  9614.  
  9615.         if (xmlComponents.childNodes.length == 0) return;
  9616.  
  9617.         var strXMLUserComponents = "<USER_ADDITIONAL_COMPONENTS/>";
  9618.         var xmlUserComponents = EBXML_CT2384137.GetXmlDocument(strXMLUserComponents);
  9619.         var newXmlComponents = xmlUserComponents.documentElement;
  9620.         var xmlComponent = null;
  9621.         for (var i = 0; i < arrPosition.length; i++) {
  9622.             xmlComponent = this.GetComponentNodeByComponentID(xmlComponents, arrPosition[i])
  9623.             newXmlComponents.appendChild(xmlComponent);
  9624.         }
  9625.  
  9626.         this.SaveComponentsToFile(newXmlComponents);
  9627.         oToolbarManager_CT2384137.reloadUserComponents(false);
  9628.     },
  9629.  
  9630.     GetComponentId: function(xmlComponent) {
  9631.         var arrNodes = null;
  9632.  
  9633.         try {
  9634.             arrNodes = xmlComponent.parentNode.getElementsByTagName('UNIQUE_COMP_ID');
  9635.         }
  9636.         catch (e) {
  9637.             arrNodes = xmlComponent.getElementsByTagName('UNIQUE_COMP_ID');
  9638.         }
  9639.  
  9640.         if (arrNodes.length > 0)
  9641.             return EBXML_CT2384137.GetXmlNodeValue(arrNodes.item(0))
  9642.  
  9643.         return null;
  9644.     },
  9645.  
  9646.     isExists: function(xmlUserComponents, componentId) {
  9647.         var compId = '';
  9648.         for (var i = 0; i < xmlUserComponents.childNodes.length; i++) {
  9649.             compId = this.GetComponentId(xmlUserComponents.childNodes[i]);
  9650.             if (compId == componentId)
  9651.                 return true;
  9652.         }
  9653.         return false;
  9654.     }
  9655. }
  9656.  
  9657.  
  9658. var EBValidationManager_CT2384137 =
  9659. {
  9660.     validate: function(prefName) {
  9661.         var value = (EBToolbarPreferenceManager_CT2384137.HasUserValue(prefName)) ?
  9662.         EBToolbarPreferenceManager_CT2384137.GetPref(prefName) : -1;
  9663.  
  9664.         value++;
  9665.         if (value > 2) value = 2;
  9666.         EBToolbarPreferenceManager_CT2384137.SetPref(prefName, value);
  9667.     }
  9668. };
  9669. function EBWindowLoad_CT2384137(event)
  9670. {
  9671.     EBToolbarCssFunctions_CT2384137.init();
  9672.     
  9673.     oToolbar_CT2384137 = EBFManager_CT2384137.getService();
  9674.     
  9675.     //Initialize the global object(currently for the sound xpcom class)
  9676.     EBGlobalManager_CT2384137.Initialize();
  9677.     
  9678.     //register all observers
  9679.     EBObserversManager_CT2384137.Register();
  9680.     
  9681.     EBFirefoxBrowserManager_CT2384137.OnLoadWindow();
  9682.  
  9683.     EBLoadToolbar_CT2384137();
  9684. };
  9685.  
  9686. function EBWindowUnLoad_CT2384137(event)
  9687. {
  9688.     //remove all observers:
  9689.     EBObserversManager_CT2384137.UnRegister();
  9690.  
  9691.     //check if closing in uninstalltion to clear all toolbar private data
  9692.     //in the unload process - this prevents a bug if the user opened a 
  9693.     //window after he does uninstall without closing all Firefox instances first -
  9694.     //so we sure delete all data when he close the last window
  9695.     if(EBUninstallManager_CT2384137.IsToClearToolbarData())
  9696.     {
  9697.         //Restore search from address url to previous
  9698.         EBSearchFromAddressBar_CT2384137.restoreOnUninstall();
  9699.         
  9700.         EBUninstallManager_CT2384137.ClearToolbarData();
  9701.  
  9702.         if (EBUninstallManager_CT2384137.IsLastToolbar(EBPreferenceConsts_CT2384137.ToolbarsList))
  9703.             EBUninstallManager_CT2384137.ClearCommonData();
  9704.         
  9705.         //Clear Alert Info
  9706.         EBAlertManager_CT2384137.Uninstall();
  9707.  
  9708.         //set toolbar visible, for next time installation
  9709.         EBActionManager_CT2384137.SetToolbarVisible();
  9710.         
  9711.         //close all remain open windows to fully complete the uninstallation
  9712.         EBUninstallManager_CT2384137.CloseAllWindows();
  9713.     }
  9714.  
  9715.     EBUnloadToolbar_CT2384137(true);
  9716. };
  9717.  
  9718. function EBWindowClose_CT2384137(event) {};
  9719.  
  9720. function EBWindowMouseUp_CT2384137(event) {
  9721.     EBSelectToSearchBox_CT2384137.onmouseup(event);
  9722. };
  9723.  
  9724. function EBWindowMouseMove_CT2384137(event)
  9725. {
  9726.     //set the globals variable state the client coordinates
  9727.     EBGlobalVariables_CT2384137.ScreenCoordinateX = event.screenX;
  9728.     EBGlobalVariables_CT2384137.ScreenCoordinateY = event.screenY;
  9729. };
  9730.  
  9731. //global event of the window to set focus
  9732. // - start to be able catch the onfocus on the searchbox menulist
  9733. //which does not have an auto onblur event
  9734. function EBWindowFocus_CT2384137(event) {
  9735.     if (event.eventPhase == 2)
  9736.         EBChevronStaticManager_CT2384137.onWindowResize(event);
  9737.         
  9738.     if(event && event.target)
  9739.     {
  9740.         var XULSearchBoxMenuList = EBComponentsManager_CT2384137.GetSearchBoxMenuList();
  9741.         if(XULSearchBoxMenuList && event.target == XULSearchBoxMenuList)
  9742.             EBSearchBoxManager_CT2384137.OnSearchBoxFocus(event);
  9743.     }
  9744.     
  9745. };
  9746.  
  9747. //global event of the window to set blur(un-focus)
  9748. // - start to be able catch the onblur on the searchbox menulist
  9749. //which does not have an auto onblur event
  9750. function EBWindowBlur_CT2384137(event)
  9751. {
  9752.     if(event && event.target)
  9753.     {
  9754.         var XULSearchBoxMenuList = EBComponentsManager_CT2384137.GetSearchBoxMenuList();
  9755.         if(XULSearchBoxMenuList && event.target == XULSearchBoxMenuList)
  9756.         {
  9757.             EBSearchBoxManager_CT2384137.OnSearchBoxBlur(event);
  9758.         }
  9759.         
  9760.     }
  9761. };
  9762.  
  9763. function EBWindowResize_CT2384137(event) {
  9764.     if (event.eventPhase != 2) return;
  9765.  
  9766.     EBChevronStaticManager_CT2384137.onWindowResize(event);
  9767. };
  9768.  
  9769.  
  9770. function EBAOLAccount_CT2384137(strEmail, strPassword) {
  9771.     this.MailAccount = null;
  9772.  
  9773.     //Constructor
  9774.     this.InitAccount = function(strEMail, strPassword) {
  9775.         //initialize the email account object
  9776.         this.MailAccount = new EBEMailAccount_CT2384137(EBEmailAccountsConsts_CT2384137.AOL.MailURL, strEMail, strPassword);
  9777.     }
  9778.  
  9779.     this._login = function(event, objExtractNewMessages) {
  9780.         var strMailURL = this.MailAccount.MailURL;
  9781.         var that = this;
  9782.         var objCallBackFunction = function() {
  9783.             var objLogin = function(strHtml) {
  9784.                 var strPostData = that._GetPostData.call(that, strHtml);
  9785.                 if (objExtractNewMessages)
  9786.                     EBServerDataURL_CT2384137.ServerRequest(strMailURL, strPostData, null, null, objExtractNewMessages);
  9787.                 else {
  9788.                     var bIsInNewTab = event.button == 1;
  9789.                     EBLinkManager_CT2384137.LoadLinkURL(event, strMailURL, bIsInNewTab, strPostData);
  9790.                 }
  9791.             };
  9792.             EBServerDataURL_CT2384137.ServerRequest(EBEmailAccountsConsts_CT2384137.AOL.MailURL, null, null, null, objLogin);
  9793.         };
  9794.  
  9795.         //logout before navigating to the account
  9796.         this.DeleteSessionCookies();
  9797.         EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.AOL.MailLogoutURL, objCallBackFunction);
  9798.     };
  9799.  
  9800.     this.Login = function(event) {
  9801.         var oNewTab = getBrowser().addTab("chrome://iobitcom/content/wait.xul");
  9802.         getBrowser().selectedTab = oNewTab;
  9803.         var strMailURL = this.MailAccount.MailURL;
  9804.         var bIsInNewTab = event.button == 1;
  9805.         var goToAccount = function() {
  9806.             oNewTab.linkedBrowser.contentDocument.location.href = strMailURL;
  9807.         };
  9808.         this.GetNewMessagesCount(goToAccount);
  9809.     };
  9810.  
  9811.     this.Logout = function(event) {
  9812.         var strLogoutURL = EBEmailAccountsConsts_CT2384137.AOL.MailLogoutURL;
  9813.         var strLoginURL = EBEmailAccountsConsts_CT2384137.AOL.MailURL;
  9814.  
  9815.         var objCallBackFunction = function() {
  9816.             EBLinkManager_CT2384137.LoadLinkURL(event, strLogoutURL, false, null);
  9817.         };
  9818.         
  9819.         EBWeb_CT2384137.NavigationWithCallBack(strLogoutURL, objCallBackFunction);
  9820.     };
  9821.  
  9822.  
  9823.     this.DeleteSessionCookies = function() {
  9824.         var oCookieManager = Components.classes["@mozilla.org/cookieService;1"].
  9825.                   getService(Components.interfaces.nsICookieManager);
  9826.  
  9827.         //TODO if needed
  9828.     };
  9829.  
  9830.     this.IsLoggedIn = function(objCallBackFunction) {
  9831.         //check if there an open window on yahoo mail and check to retrive the 
  9832.         //new messages from this window using it html document
  9833.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  9834.                         .getService(Components.interfaces.nsIWindowMediator);
  9835.  
  9836.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  9837.         while (objEnumerator.hasMoreElements()) {
  9838.             var objWindow = objEnumerator.getNext();
  9839.             var objTabBrowser = objWindow.document.getElementById('content');
  9840.             var objTab = null;
  9841.             for (var i = 0; i < objTabBrowser.browsers.length; i++) {
  9842.                 objTab = objTabBrowser.browsers[i];
  9843.                 var objTabDocument = objTab.contentWindow.document;
  9844.  
  9845.                 var strLocationURL = objTabDocument.location.href;
  9846.  
  9847.                 if (strLocationURL.toLowerCase().indexOf(EBEmailAccountsConsts_CT2384137.AOL.CheckLoginInURL) != -1) {
  9848.                     iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_ANOTHER_ACCOUNT;
  9849.                     objCallBackFunction(iNewMessages);
  9850.                     return true;
  9851.                 }
  9852.             }
  9853.         }
  9854.         return false;
  9855.     };
  9856.  
  9857.     this.GetNewMessagesCount = function(objCallBackFunction, bIsFromCheck) {
  9858.         var strMailURL = this.MailAccount.MailURL;
  9859.         var strEMail = this.MailAccount.EMail;
  9860.         var iNewMessages = null;
  9861.  
  9862.         if (this.IsLoggedIn(objCallBackFunction)) return;
  9863.  
  9864.         var objCheckFunction = function(objDoc) {
  9865.             var arrBody = objDoc.getElementsByTagName("body");
  9866.             if (arrBody && arrBody.length != 0) {
  9867.                 var strHtml = arrBody[0].innerHTML;
  9868.                 var arrMatches = strHtml.match(/onClickMailCount\"\>(\d*)/);
  9869.                 if (arrMatches && arrMatches.length >= 2 && !isNaN(parseInt(arrMatches[1]))) {
  9870.                     var iCount = parseInt(arrMatches[1]);
  9871.                     return iCount;
  9872.                 }
  9873.             }
  9874.  
  9875.             return null;
  9876.         };
  9877.  
  9878.         var strLogoutUrl = EBEmailAccountsConsts_CT2384137.AOL.MailLogoutURL;
  9879.         var strLoginUrl = EBEmailAccountsConsts_CT2384137.AOL.MailURL;
  9880.         var strUserName = this.MailAccount.UserName;
  9881.         var strPass = this.MailAccount.Password;
  9882.         var strUserNameFieldID = "lgnId1";
  9883.         var strPassFieldID = "pwdId1";
  9884.         var strSubmitID = "aolsubmit";
  9885.         var strFormName = "AOLLoginForm";
  9886.         var strFrameName = null;
  9887.         if (bIsFromCheck) {
  9888.             var strBrowserID = EBComponentsConsts_CT2384137.EMailNotifierNewID;
  9889.  
  9890.             EBEmailNotifierManager_CT2384137.xulBrowser = EBXULFactory_CT2384137.CreateBrowser(strBrowserID, '', 0, 0);
  9891.             document.getElementById('mainBox').appendChild(EBEmailNotifierManager_CT2384137.xulBrowser);
  9892.         }
  9893.         var loginToAOL = function() {
  9894.             EBEmailNotifierManager_CT2384137.CheckForEmails(
  9895.                                                         objCallBackFunction,
  9896.                                                         objCheckFunction,
  9897.                                                         strLogoutUrl,
  9898.                                                         strLoginUrl,
  9899.                                                         strUserName,
  9900.                                                         strPass,
  9901.                                                         strUserNameFieldID,
  9902.                                                         strPassFieldID,
  9903.                                                         strSubmitID,
  9904.                                                         strFrameName,
  9905.                                                         strFormName);
  9906.         };
  9907.         this._login(null, loginToAOL);
  9908.     };
  9909.  
  9910.     this._GetPostData = function(strHtml) {
  9911.         var arrMatches = strHtml.match(/name=\"usrd\" value=\"(\d+)/);
  9912.         var strUsrd = (arrMatches) ? arrMatches[1] : "";
  9913.         var strPostData = "loginId=" + this.MailAccount.UserName + "&password=" + this.MailAccount.Password;
  9914.         strPostData += "&siteId=";
  9915.         strPostData += "&sitedomain=sns.webmail.aol.com";
  9916.         //strPostData += "&sitedomain=";
  9917.         strPostData += "&lang=en";
  9918.         strPostData += "&locale=us";
  9919.         strPostData += "&authLev=0";
  9920.         strPostData += "&siteState=";
  9921.         strPostData += "&isSiteStateEncoded=false";
  9922.         strPostData += "&mcState=initialized";
  9923.         strPostData += "&uitype=std";
  9924.         strPostData += "&use_aam=0";
  9925.         strPostData += "&_sns_fg_color_=";
  9926.         strPostData += "&_sns_err_color_=";
  9927.         strPostData += "&_sns_link_color_=";
  9928.         strPostData += "&_sns_width_";
  9929.         strPostData += "&_sns_height_";
  9930.         strPostData += "&_sns_bg_color_";
  9931.         strPostData += "&offerId=mail-second-en-us";
  9932.         strPostData += "&seamless=novl";
  9933.         strPostData += "®PromoCode=";
  9934.         strPostData += "&idType=SN";
  9935.         strPostData += "&xchk=false";
  9936.         strPostData += "&doSSL=";
  9937.         strPostData += "&redirType=";
  9938.         strPostData += "&rememberMe=";
  9939.         strPostData += "&usrd=" + strUsrd;
  9940.         return strPostData;
  9941.     };
  9942.  
  9943.     this.InitAccount(strEmail, strPassword);
  9944. };
  9945. /********************* GMail Account ****************************/
  9946. function EBGmailAccount_CT2384137(strEMail, strPassword) {
  9947.     this.MailAccount = null;
  9948.  
  9949.     //Constructor
  9950.     this.InitAccount = function(strEMail, strPassword) {
  9951.         //initialize the email account object
  9952.         this.MailAccount = new EBEMailAccount_CT2384137(EBEmailAccountsConsts_CT2384137.GMail.MailURL, strEMail, strPassword);
  9953.     }
  9954.  
  9955.     this.Login = function(event) {
  9956.         var oNewTab = getBrowser().addTab("chrome://iobitcom/content/wait.xul");
  9957.         getBrowser().selectedTab = oNewTab;
  9958.         var strMailURL = "http://gmail.com";
  9959.         var bIsInNewTab = event.button == 1;
  9960.         var goToAccount = function() {
  9961.             oNewTab.linkedBrowser.contentDocument.location.href = strMailURL;
  9962.         };
  9963.         
  9964.         this._preLogin(goToAccount);
  9965.     };
  9966.  
  9967.     this.Logout = function(event) {
  9968.         var strLogoutURL = EBEmailAccountsConsts_CT2384137.GMail.MailLogoutURL;
  9969.         var strLoginURL = EBEmailAccountsConsts_CT2384137.GMail.MailURLnoAuth;
  9970.         EBLinkManager_CT2384137.LoadLinkURL(event, strLogoutURL, false, null);
  9971.         EBLinkManager_CT2384137.LoadLinkURL(event, strLoginURL, false, null);
  9972.     };
  9973.  
  9974.  
  9975.     this._GetGmailPostData = function() {
  9976.         var strPostData = "ltmpl=wsad<mplcache=2&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&rm=false<mpl=wsad&Email=" +
  9977.                         encodeURIComponent(this.MailAccount.UserName) + "&Passwd=" + encodeURIComponent(this.MailAccount.Password) + "&null=Sign+in";
  9978.         
  9979.         return strPostData;
  9980.     };
  9981.  
  9982.     this.GetNewMessagesCount = function(objCallBackFunction) {
  9983.         //define the response function coming from the server
  9984.         //after retrieving the string data
  9985.         var objServerResponseFunction = function(strData, objRequest) {
  9986.             var iNewMessagesCount = EBEmailAccountsConsts_CT2384137.LOGIN_FAILED;
  9987.             //parse the data of the xml
  9988.             var XMLDoc = EBXML_CT2384137.GetXmlDocument(strData);
  9989.  
  9990.             var objXMLRoot = XMLDoc.documentElement;
  9991.             var objXMLChildNode = null;
  9992.             if (objXMLRoot.tagName == "feed") {
  9993.                 for (var i = 0; i < objXMLRoot.childNodes.length; i++) {
  9994.                     objXMLChildNode = objXMLRoot.childNodes[i];
  9995.                     if (objXMLChildNode.tagName == 'fullcount') {
  9996.                         iNewMessagesCount = EBXML_CT2384137.GetXmlNodeValue(objXMLChildNode);
  9997.                         break;
  9998.                     }
  9999.                 }
  10000.             }
  10001.             objCallBackFunction(iNewMessagesCount);
  10002.         };
  10003.  
  10004.         //call a dummy request first to nullify the gmail feed session
  10005.         EBServerDataURL_CT2384137.ServerRequest(EBEmailAccountsConsts_CT2384137.GMail.FeedURL,
  10006.                                         '',
  10007.                                         'dummy',
  10008.                                         'dummy',
  10009.                                         null);
  10010.  
  10011.         EBServerDataURL_CT2384137.ServerRequest(EBEmailAccountsConsts_CT2384137.GMail.FeedURL,
  10012.                                         '',
  10013.                                         this.MailAccount.UserName,
  10014.                                         this.MailAccount.Password,
  10015.                                         objServerResponseFunction);
  10016.  
  10017.     };
  10018.  
  10019.     this._preLogin = function(objCallBackFunction, bIsFromCheck) {
  10020.         var strMailURL = this.MailAccount.MailURL;
  10021.         var strEMail = this.MailAccount.EMail;
  10022.         var iNewMessages = null;
  10023.  
  10024.         //if (this.IsLoggedIn(objCallBackFunction)) return;
  10025.  
  10026.         var objCheckFunction = function(objDoc) {
  10027.             return (objDoc.location.href.indexOf("://www.google.com/accounts/ManageAccount") != -1) ? 1 : null;
  10028.         };
  10029.  
  10030.         var strLogoutUrl = EBEmailAccountsConsts_CT2384137.GMail.MailLogoutURL;
  10031.         var strLoginUrl = EBEmailAccountsConsts_CT2384137.GMail.MailURL;
  10032.         var strUserName = this.MailAccount.UserName;
  10033.         var strPass = this.MailAccount.Password;
  10034.         var strUserNameFieldID = "Email";
  10035.         var strPassFieldID = "Passwd";
  10036.         var strSubmitID = "Passwd";
  10037.         var strFormName = null;
  10038.         var strFrameName = null;
  10039.         if (bIsFromCheck) {
  10040.             var strBrowserID = EBComponentsConsts_CT2384137.EMailNotifierNewID;
  10041.  
  10042.             EBEmailNotifierManager_CT2384137.xulBrowser = EBXULFactory_CT2384137.CreateBrowser(strBrowserID, '', 0, 0);
  10043.             document.getElementById('mainBox').appendChild(EBEmailNotifierManager_CT2384137.xulBrowser);
  10044.         }
  10045.  
  10046.         var login = function() {
  10047.             EBEmailNotifierManager_CT2384137.CheckForEmails(
  10048.                                                         objCallBackFunction,
  10049.                                                         objCheckFunction,
  10050.                                                         strLogoutUrl,
  10051.                                                         strLoginUrl,
  10052.                                                         strUserName,
  10053.                                                         strPass,
  10054.                                                         strUserNameFieldID,
  10055.                                                         strPassFieldID,
  10056.                                                         strSubmitID,
  10057.                                                         strFrameName,
  10058.                                                         strFormName);
  10059.         };
  10060.  
  10061.         EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.GMail.MailLogoutURL, login);
  10062.     };
  10063.  
  10064.  
  10065.     //call the constructor when the object is raised
  10066.     this.InitAccount(strEMail, strPassword);
  10067. };
  10068. /********************* Hotmail Account ****************************/
  10069. function EBHotmailAccount_CT2384137(strEMail, strPassword) {
  10070.     this.MailAccount = null;
  10071.  
  10072.     //Constructor
  10073.     this.InitAccount = function(strEMail, strPassword) {
  10074.         //initialize the email account object
  10075.         this.MailAccount = new EBEMailAccount_CT2384137('', strEMail, strPassword);
  10076.     };
  10077.     
  10078.     this.Login = function(event) {
  10079.         var strPostData = this._GetHotmailPostData();
  10080.         var oEvent = event;
  10081.         var bIsInNewTab = oEvent.button == 1;
  10082.         var objCallBackFunction = function(strFormAction, strPPFTHiddenValue) {
  10083.             if (strFormAction && strPPFTHiddenValue) {
  10084.                 strPostData += strPPFTHiddenValue;
  10085.                 EBLinkManager_CT2384137.LoadLinkURL(oEvent, strFormAction, bIsInNewTab, strPostData);
  10086.             }
  10087.         };
  10088.  
  10089.         var objLogoutWithCallBackFunction = function() {
  10090.             EBHotmailAccountManager_CT2384137.GetLoginInformation(objCallBackFunction);
  10091.         };
  10092.  
  10093.         this.DeleteSessionCookies();
  10094.         EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.Hotmail.MailLogoutURL, objLogoutWithCallBackFunction);
  10095.  
  10096.     };
  10097.  
  10098.     this.Logout = function(event) {
  10099.         var strLogoutURL = EBEmailAccountsConsts_CT2384137.Hotmail.MailLogoutURL;
  10100.         var strLoginURL = EBEmailAccountsConsts_CT2384137.Hotmail.MailURL;
  10101.         EBLinkManager_CT2384137.LoadLinkURL(event, strLogoutURL, false, null);
  10102.         EBLinkManager_CT2384137.LoadLinkURL(event, strLoginURL, false, null);
  10103.     };
  10104.  
  10105.     this._GetHotmailPostData = function() {
  10106.         var strPostData = 'PPSX=Pas&PwdPad=IfYouAreReadingThisYouHaveTooMuchFreeTime&login=' + encodeURIComponent(this.MailAccount.EMail) + '&passwd=' + encodeURIComponent(this.MailAccount.Password) + '&PPFT=';
  10107.         return strPostData;
  10108.     };
  10109.  
  10110.     this.DeleteSessionCookies = function() {
  10111.         var oCookieManager = Components.classes["@mozilla.org/cookieService;1"].
  10112.                   getService(Components.interfaces.nsICookieManager);
  10113.  
  10114.         oCookieManager.remove('.msn.com', 'MSPAuth', '/', false);
  10115.         oCookieManager.remove('.msn.com', 'MSPProf', '/', false);
  10116.         oCookieManager.remove('.msn.com', 'MailToken', '/', false);
  10117.         oCookieManager.remove('.msn.com', 'PIM', '/', false);
  10118.         oCookieManager.remove('.msn.com', 'MUID', '/', false);
  10119.         oCookieManager.remove('.msn.com', 'ANON', '/', false);
  10120.         oCookieManager.remove('.msn.com', 'NAP', '/', false);
  10121.  
  10122.         oCookieManager.remove('.login.live.com', 'PPAuth', '/', false);
  10123.         oCookieManager.remove('.login.live.com', 'RPSTAuthTime', '/', false);
  10124.         oCookieManager.remove('.login.live.com', 'MSPVis', '/', false);
  10125.         oCookieManager.remove('.login.live.com', 'MSPSoftVis', '/', false);
  10126.         oCookieManager.remove('.login.live.com', 'MSPCID', '/', false);
  10127.         oCookieManager.remove('.login.live.com', 'MSPPre', '/', false);
  10128.         oCookieManager.remove('login.live.com', 'MSPRequ', '/', false);
  10129.  
  10130.         oCookieManager.remove('.live.com', 'PPLState', '/', false);
  10131.         oCookieManager.remove('.live.com', 'RPSTAuth', '/', false);
  10132.         oCookieManager.remove('.live.com', 'MSPAuth', '/', false);
  10133.         oCookieManager.remove('.live.com', 'MSPProf', '/', false);
  10134.         oCookieManager.remove('.live.com', 'MSPSecAuth', '/', false);
  10135.         oCookieManager.remove('.live.com', 'MUID', '/', false);
  10136.  
  10137.         oCookieManager.remove('by117w.bay117.mail.live.com', 'mt', '/', false);
  10138.         oCookieManager.remove('by123w.bay123.mail.live.com', 'mt', '/', false);
  10139.  
  10140.         oCookieManager.remove('.hotmail.msn.com', 'HMSC0899', '/', false);
  10141.         oCookieManager.remove('.hotmail.msn.com', 'HMSatchmo', '/', false);
  10142.         oCookieManager.remove('.hotmail.msn.com', 'HMP1', '/', false);
  10143.  
  10144.         oCookieManager.remove('.passport.com', 'MSPBack', '/', false);
  10145.         oCookieManager.remove('.passport.com', 'PPWLRedir', '/', false);
  10146.         oCookieManager.remove('.passport.com', 'PPStateXfer', '/', false);
  10147.  
  10148.         oCookieManager.remove('login.passport.com', 'MSPRequ', '/', false);
  10149.  
  10150.         oCookieManager.remove('.mail.live.com', 'KSC1108', '/', false);
  10151.         oCookieManager.remove('.mail.live.com', 'bic', '/', false);
  10152.         oCookieManager.remove('.mail.live.com', 'KVC', '/', false);
  10153.  
  10154.  
  10155.     };
  10156.  
  10157.     this.IsLogIn = function(strLocation) {
  10158.         strLocation = strLocation.toLowerCase();
  10159.         var arrLoginURL = EBEmailAccountsConsts_CT2384137.Hotmail.CheckLoginInURL;
  10160.         for (var i = 0; i < arrLoginURL.length; i++) {
  10161.             if (strLocation.indexOf(arrLoginURL[i]) != -1) {
  10162.                 return true;
  10163.             }
  10164.         }
  10165.  
  10166.         return false;
  10167.     };
  10168.  
  10169.     this.IsLoggedIn = function() {
  10170.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  10171.                         .getService(Components.interfaces.nsIWindowMediator);
  10172.  
  10173.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  10174.         while (objEnumerator.hasMoreElements()) {
  10175.             var objWindow = objEnumerator.getNext();
  10176.             var objTabBrowser = objWindow.document.getElementById('content');
  10177.             var objTab = null;
  10178.             for (var i = 0; i < objTabBrowser.browsers.length; i++) {
  10179.                 objTab = objTabBrowser.browsers[i];
  10180.                 var objTabDocument = objTab.contentWindow.document;
  10181.                 var objTabBody = objTabDocument.body;
  10182.                 var strLocationURL = objTabDocument.location.href;
  10183.  
  10184.                 //check if the user is logged in to Hotmail account
  10185.                 //to prevent the check new messages (which log you out 
  10186.                 //from your current account!)
  10187.                 if (this.IsLogIn(strLocationURL)) {
  10188.                     //in hotmail i can't always check his new messages
  10189.                     //because of the different pages so i always return login anouther 
  10190.                     //user to make him disconnect
  10191.                     return true;
  10192.                 }
  10193.             }
  10194.         }
  10195.  
  10196.         return false;
  10197.     };
  10198.  
  10199.     this.GetNewMessagesCount = function(objCallBackNewMessagesFunction, bIsFromCheck) {
  10200.         var iNewMessages = null;
  10201.  
  10202.         //var strPostData = this._GetHotmailPostData();
  10203.         var strEMail = this.MailAccount.EMail.toLowerCase();
  10204.  
  10205.         //check if there an open window on hotmail mail and check to retrive the 
  10206.         if (this.IsLoggedIn()) {
  10207.             iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_ANOTHER_ACCOUNT;
  10208.             objCallBackNewMessagesFunction(iNewMessages);
  10209.             return;
  10210.         }
  10211.  
  10212.         iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_FAILED;
  10213.  
  10214.         var objCheckFunction = function(objDocument) {
  10215.             var arrObjHTML = objDocument.getElementsByTagName('html');
  10216.             var iInbox = null;
  10217.             var oUL;
  10218.             if (arrObjHTML.length > 0) {
  10219.                 //try hotmail beta light first
  10220.                 if (objDocument.location.href.indexOf('TodayLight.aspx') != -1) {
  10221.                     oUL = objDocument.getElementById("folderList");
  10222.                     if (oUL) {
  10223.                         iInbox = parseInt(oUL.firstChild.getAttribute("count"));
  10224.                         if (!isNaN(iInbox))
  10225.                             return iInbox;
  10226.                     }
  10227.                 }
  10228.                 //try hotmail beta
  10229.                 else {
  10230.                     oUL = objDocument.getElementById("FolderListPane");
  10231.                     if (oUL) {
  10232.                         var strHTML = oUL.firstChild.innerHTML;
  10233.                         var arrMatch = strHTML.match(/\((\d*)\)/);
  10234.                         if (arrMatch) {
  10235.                             iInbox = arrMatch[1];
  10236.                             if (!isNaN(iInbox))
  10237.                                 return iInbox;
  10238.                         }
  10239.                     }
  10240.  
  10241.                     //regular hotmail
  10242.                     var innerHTML = arrObjHTML[0].innerHTML;
  10243.                     //parse the source using indexOf and not regular expression cause there
  10244.                     //is too many matching templates to the new messages templates
  10245.                     var strFontClassK = innerHTML.substring(innerHTML.indexOf('<font class="K">'));
  10246.                     var strNewMessages = strFontClassK.substring(strFontClassK.indexOf('(') + 1, strFontClassK.indexOf(')'));
  10247.                     if (strNewMessages && isFinite(strNewMessages)) {
  10248.                         iInbox = strNewMessages;
  10249.                     }
  10250.                     //sometimes the landing page is Today and not Mail
  10251.                     else {
  10252.                         strFontClassK = innerHTML.substring(innerHTML.lastIndexOf('<font class="K">'))
  10253.                         strNewMessages = strFontClassK.substring(strFontClassK.indexOf('(') + 1, strFontClassK.indexOf(')'));
  10254.                         if (strNewMessages && isFinite(strNewMessages)) {
  10255.                             iInbox = strNewMessages;
  10256.                         }
  10257.                     }
  10258.                 }
  10259.             }
  10260.  
  10261.             return iInbox;
  10262.         };
  10263.  
  10264.         var strLogooutUrl = EBEmailAccountsConsts_CT2384137.Hotmail.MailLogoutURL;
  10265.         var strLoginUrl = 'http://login.live.com/login.srf?id=2'; //'http://hotmail.com/';
  10266.         var strUserName = this.MailAccount.EMail;
  10267.         var strPass = this.MailAccount.Password;
  10268.         var strUserNameFieldID = 'i0116';
  10269.         var strPassFieldID = 'i0118';
  10270.         var strSubmitID = 'i0011';
  10271.         var strFrameName = '';
  10272.  
  10273.         if (bIsFromCheck) {
  10274.             var strBrowserID = EBComponentsConsts_CT2384137.EMailNotifierNewID;
  10275.  
  10276.             EBEmailNotifierManager_CT2384137.xulBrowser = EBXULFactory_CT2384137.CreateBrowser(strBrowserID, '', 0, 0);
  10277.             document.getElementById('mainBox').appendChild(EBEmailNotifierManager_CT2384137.xulBrowser);
  10278.         }
  10279.  
  10280.         EBEmailNotifierManager_CT2384137.CheckForEmails(
  10281.                                                         objCallBackNewMessagesFunction,
  10282.                                                         objCheckFunction,
  10283.                                                         strLogooutUrl,
  10284.                                                         strLoginUrl,
  10285.                                                         strUserName,
  10286.                                                         strPass,
  10287.                                                         strUserNameFieldID,
  10288.                                                         strPassFieldID,
  10289.                                                         strSubmitID,
  10290.                                                         strFrameName
  10291.                                                         );
  10292.  
  10293.         var objCallBackFunction = function(strFormAction, strPPFTHiddenValue) {
  10294.             if (strFormAction && strPPFTHiddenValue) {
  10295.                 strPostData += strPPFTHiddenValue;
  10296.  
  10297.  
  10298.                 var objServerResponseFunction = function(strData, aRequest) {
  10299.                     var strInboxURL = '';
  10300.  
  10301.                     //first check within the javascript location.replace
  10302.                     var arrMatches = strData.match(/location.replace\([\"|\']*([^\"|^\']+)[\"|\']*\).*/i);
  10303.                     if (arrMatches) {
  10304.                         strInboxURL = arrMatches[1];
  10305.                     }
  10306.                     else {
  10307.                         //second check in the meta tag
  10308.                         arrMatches = strData.match(/URL=[\"|\']*([^\"|^\'|^\>]+)[\"|\']*.*/i);
  10309.                         if (arrMatches) {
  10310.                             strInboxURL = arrMatches[1];
  10311.                         }
  10312.                     }
  10313.                     if (strInboxURL) {
  10314.                         var objServerResponseFunctionInner = function(strDataInner, aRequestInner) {
  10315.                             var strSource = strDataInner;
  10316.  
  10317.                             //check for hotmail beta:
  10318.                             var strLocationReplaceURL = '';
  10319.                             var arrMatches = strSource.match(/location.replace\([\"|\']*([^\"|^\']+)[\"|\']*\).*/i);
  10320.                             if (arrMatches) {
  10321.                                 strLocationReplaceURL = arrMatches[1];
  10322.                             }
  10323.  
  10324.                             if (strLocationReplaceURL)//hotmail beta
  10325.                             {
  10326.                                 EBHotmailBetaAccountManager_CT2384137.CheckNewMessages(strLocationReplaceURL, objCallBackNewMessagesFunction);
  10327.                             }
  10328.                             else //regular hotmail
  10329.                             {
  10330.                                 iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_FAILED;
  10331.                                 //parse the source using indexOf and not regular expression cause there
  10332.                                 //is too many matching templates to the new messages templates
  10333.                                 var strFontClassK = strSource.substring(strSource.indexOf('<font class="K">'));
  10334.  
  10335.                                 var strNewMessages = strFontClassK.substring(strFontClassK.indexOf('(') + 1, strFontClassK.indexOf(')'));
  10336.  
  10337.                                 if (strNewMessages && isFinite(strNewMessages)) {
  10338.                                     iNewMessages = strNewMessages;
  10339.                                 }
  10340.                                 //sometimes the landing page is Today and not Mail
  10341.                                 else {
  10342.                                     strFontClassK = strSource.substring(strSource.lastIndexOf('<font class="K">'))
  10343.                                     strNewMessages = strFontClassK.substring(strFontClassK.indexOf('(') + 1, strFontClassK.indexOf(')'));
  10344.                                     if (strNewMessages && isFinite(strNewMessages)) {
  10345.                                         iNewMessages = strNewMessages;
  10346.                                     }
  10347.                                 }
  10348.  
  10349.                                 objCallBackNewMessagesFunction(iNewMessages);
  10350.                             }
  10351.                         };
  10352.  
  10353.                         EBServerDataURL_CT2384137.ServerRequest(strInboxURL,
  10354.                                             null,
  10355.                                             null,
  10356.                                             null,
  10357.                                             objServerResponseFunctionInner);
  10358.                     }
  10359.                     else {
  10360.                         objCallBackNewMessagesFunction(iNewMessages);
  10361.                     }
  10362.                 }
  10363.  
  10364.                 EBServerDataURL_CT2384137.ServerRequest(strFormAction,
  10365.                                                 strPostData,
  10366.                                                 null,
  10367.                                                 null,
  10368.                                                 objServerResponseFunction);
  10369.  
  10370.             }
  10371.             else {
  10372.                 objCallBackNewMessagesFunction(iNewMessages);
  10373.             }
  10374.         };
  10375.  
  10376.         var objLogoutWithCallBackFunction = function() {
  10377.             EBHotmailAccountManager_CT2384137.GetLoginInformation(objCallBackFunction);
  10378.         };
  10379.  
  10380.         //this.DeleteSessionCookies();
  10381.         //EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.Hotmail.MailLogoutURL,objLogoutWithCallBackFunction);
  10382.     };
  10383.     this.InitAccount(strEMail, strPassword);
  10384. };
  10385.  
  10386. var EBHotmailAccountManager_CT2384137 =
  10387. {
  10388.     GetLoginInformation: function(objCallBackFunction) {
  10389.         var objServerResponseFunction = function(strDataInner, aRequestInner) {
  10390.  
  10391.             var strFormAction = '';
  10392.             var strPPFTHiddenValue = '';
  10393.  
  10394.             var arrMatches = strDataInner.match(/\<form\s+.*action=[\"|\']*([^\"|^\']+)[\"|\']*.*\>/i);
  10395.             if (arrMatches) {
  10396.                 strFormAction = arrMatches[1];
  10397.             }
  10398.             arrMatches = strDataInner.match(/\<input\s+.*name=[\"|\']*PPFT[\"|\']*\s+.*value=[\"|\']*([^\"|^\']+)[\"|\']*.*\>/i);
  10399.             if (arrMatches) {
  10400.                 strPPFTHiddenValue = arrMatches[1];
  10401.             }
  10402.  
  10403.             objCallBackFunction(strFormAction, strPPFTHiddenValue);
  10404.         };
  10405.  
  10406.         EBServerDataURL_CT2384137.ServerRequest(EBEmailAccountsConsts_CT2384137.Hotmail.URL,
  10407.                                                 null,
  10408.                                                 null,
  10409.                                                 null,
  10410.                                                 objServerResponseFunction);
  10411.     }
  10412. }
  10413.  
  10414.  
  10415. var EBHotmailBetaAccountManager_CT2384137 =
  10416. {
  10417.     CheckNewMessages: function(strLocationReplaceURL, objCallBackNewMessagesFunction) {
  10418.         var oServerResponseFunction = function(strData, oRequest) {
  10419.             var strMainFrameSrc = '';
  10420.             //find the main frame src from the html frameset code:
  10421.             var arrMatches = strData.match(/frame\s+.*name=[\"|\']*main[\"|\']*\s+.*src=[\"|\']*([^\"|^\']+)[\"|\']*\s+/i);
  10422.  
  10423.             if (arrMatches) {
  10424.                 strMainFrameSrc = arrMatches[1];
  10425.             }
  10426.             else {
  10427.                 var iNewMessages = 0;
  10428.                 arrMatches = ''
  10429.                 arrMatches = strData.match(/Inbox \(([^\"|^\']+)\)/);
  10430.                 if (arrMatches) {
  10431.                     iNewMessages = parseInt(arrMatches[1]);
  10432.                 }
  10433.                 objCallBackNewMessagesFunction(iNewMessages);
  10434.                 return;
  10435.             }
  10436.             var strHotmailURLPath = strLocationReplaceURL.substring(0, strLocationReplaceURL.lastIndexOf('/') + 1);
  10437.             if (strMainFrameSrc) {
  10438.                 var strFullApplicationMailURL = strHotmailURLPath + strMainFrameSrc;
  10439.                 EBHotmailBetaAccountManager_CT2384137.ParseApplicationMailFrame(strHotmailURLPath, strFullApplicationMailURL, objCallBackNewMessagesFunction);
  10440.             }
  10441.             else {
  10442.                 objCallBackNewMessagesFunction(EBEmailAccountsConsts_CT2384137.LOGIN_FAILED);
  10443.             }
  10444.         };
  10445.  
  10446.         EBServerDataURL_CT2384137.ServerRequest(strLocationReplaceURL,
  10447.                                 null,
  10448.                                 null,
  10449.                                 null,
  10450.                                 oServerResponseFunction);
  10451.     },
  10452.  
  10453.     ParseApplicationMailFrame: function(strHotmailURLPath, strApplicationMailURL, objCallBackNewMessagesFunction) {
  10454.         var arrMatches = null;
  10455.         var oServerResponseFunctionFirst = function(strData, oRequest) {
  10456.             var strSessionHash = '';
  10457.             //looking for sessionidhash in the js code example: 
  10458.             //"sessionidhash" : "yBUJQZ0rvmjNav9NBYv3iA%3d%3d",;
  10459.             arrMatches = strData.match(/[\"|\']*sessionidhash[\"|\']*\s*\:\s*[\"|\']([^\"|^\']+)[\"|\']/i);
  10460.  
  10461.             if (arrMatches) {
  10462.                 strSessionHash = arrMatches[1];
  10463.             }
  10464.  
  10465.             var strCheckInboxURL = '';
  10466.             if (strSessionHash) {
  10467.                 strCheckInboxURL = EBHotmailBetaAccountManager_CT2384137.GetFullCheckInboxURL(strHotmailURLPath, strSessionHash);
  10468.             }
  10469.  
  10470.             if (strCheckInboxURL) {
  10471.                 var oServerResponseFunctionSecond = function(strData2, oRequest2) {
  10472.                     var iNewMessages = 0;
  10473.  
  10474.                     arrMatches = strData2.match(/[\"|\']i_inbox[\"|\']\D+(\d+)/i);
  10475.  
  10476.                     if (arrMatches) {
  10477.                         iNewMessages = parseInt(arrMatches[1]);
  10478.                     }
  10479.                     objCallBackNewMessagesFunction(iNewMessages);
  10480.                 };
  10481.                 var uri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
  10482.                 var oCookieManager = Components.classes["@mozilla.org/cookieService;1"].getService(Components.interfaces.nsICookieService);
  10483.                 var strMailToken = ''
  10484.                 uri.spec = '.msn.com';
  10485.                 var strCookies = oCookieManager.getCookieString(uri, null);
  10486.                 arrMyCookie = strCookies.match(/MailToken=([^\"|^\']+);/)
  10487.                 if (arrMyCookie) {
  10488.                     strMailToken = arrMyCookie[1];
  10489.                 }
  10490.  
  10491.                 EBServerDataURL_CT2384137.ServerRequest(strCheckInboxURL,
  10492.                                             'cn=Microsoft.Msn.Hotmail.MailBox&mn=Bootstrap&d={25,null,null,null,null,null,true,false,null}&v=1&mt=' + strMailToken,
  10493.                                             null,
  10494.                                             null,
  10495.                                             oServerResponseFunctionSecond);
  10496.  
  10497.             }
  10498.             else {
  10499.                 objCallBackNewMessagesFunction(EBEmailAccountsConsts_CT2384137.LOGIN_FAILED);
  10500.             }
  10501.         };
  10502.  
  10503.  
  10504.         EBServerDataURL_CT2384137.ServerRequest(strApplicationMailURL,
  10505.                                             null,
  10506.                                             null,
  10507.                                             null,
  10508.                                             oServerResponseFunctionFirst);
  10509.     },
  10510.  
  10511.     GetFullCheckInboxURL: function(strHotmailURLPath, strSessionHash) {
  10512.         var strURL = strHotmailURLPath + 'mail.fpp?cnmn=Microsoft.Msn.Hotmail.MailBox.Bootstrap&ptid=0&a=' + strSessionHash;
  10513.  
  10514.         return strURL;
  10515.     }
  10516. };
  10517. /********************* Pop3 Account ****************************/
  10518. function EBPop3Account_CT2384137(strUserName, strPassword, strServerURL, iPort) {
  10519.     this.MailAccount = null;
  10520.     this.Server = strServerURL;
  10521.     this.Port = iPort;
  10522.  
  10523.     //legalize port
  10524.     if (!this.Port) {
  10525.         this.Port = EBEmailAccountsConsts_CT2384137.Pop3.DefaultPort
  10526.     }
  10527.  
  10528.     //Constructor
  10529.     this.InitAccount = function(strEMail, strPassword) {
  10530.         //initialize the email account object
  10531.         this.MailAccount = new EBEMailAccount_CT2384137(this.Server, strUserName, strPassword);
  10532.     };
  10533.  
  10534.     this.Login = function(event) {
  10535.         EBGlobalManager_CT2384137.OpenDefaultMailClient();
  10536.     };
  10537.  
  10538.     this.Logout = function(event) {
  10539.  
  10540.     };
  10541.  
  10542.     this.GetNewMessagesCount = function(objCallBackNewMessagesFunction) {
  10543.         //set the check from the most recent browser cause it can come from 
  10544.         //the test dialog(to prevent bug when the user closes the test dialog
  10545.         //before the process eneded!)
  10546.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  10547.         if (objWindow) {
  10548.             objWindow.EBPop3AccountManager_CT2384137.Start(this.MailAccount.MailURL,
  10549.                                     this.MailAccount.EMail,
  10550.                                     this.MailAccount.Password,
  10551.                                     this.Port,
  10552.                                     objCallBackNewMessagesFunction);
  10553.         }
  10554.     };
  10555.  
  10556.  
  10557.     this.InitAccount(strUserName, strPassword);
  10558. };
  10559.  
  10560.  
  10561. var EBPop3AccountManager_CT2384137 =
  10562. {
  10563.     UserName: null,
  10564.     Password: null,
  10565.  
  10566.     InputStream: null,
  10567.     OutputStream: null,
  10568.  
  10569.     CallBack: null, //the callback function(gets new message param) 
  10570.     //to execute when the process done
  10571.     EndOfLine: null,
  10572.  
  10573.     NewMessages: null,
  10574.  
  10575.     Start: function(strServerURL, strUserName, strPassword, iPort, objCallBackFunction) {
  10576.         this.UserName = strUserName;
  10577.         this.Password = strPassword;
  10578.         this.CallBack = objCallBackFunction;
  10579.  
  10580.         //the EndOfLine char according to operation system
  10581.         this.EndOfLine = EBGlobalManager_CT2384137.GetEndOfLine();
  10582.  
  10583.         var objTransportSocket = Components.classes["@mozilla.org/network/socket-transport-service;1"]
  10584.                                     .getService(Components.interfaces.nsISocketTransportService);
  10585.  
  10586.         var objTransport = objTransportSocket.createTransport(null, 0, strServerURL, iPort, null);
  10587.  
  10588.         //initialize output stream:
  10589.         this.OutputStream = objTransport.openOutputStream(0, 0, 0);
  10590.  
  10591.         var objStream = objTransport.openInputStream(0, 0, 0);
  10592.  
  10593.         //initialize input stream:
  10594.         this.InputStream = Components.classes["@mozilla.org/scriptableinputstream;1"]
  10595.                                 .createInstance(Components.interfaces.nsIScriptableInputStream);
  10596.  
  10597.         this.InputStream.init(objStream);
  10598.  
  10599.         var objPump = Components.classes["@mozilla.org/network/input-stream-pump;1"]
  10600.                         .createInstance(Components.interfaces.nsIInputStreamPump);
  10601.         objPump.init(objStream, -1, -1, 0, 0, false);
  10602.         objPump.asyncRead(this.Listener, null);
  10603.     },
  10604.  
  10605.     Finish: function() {
  10606.         this.InputStream.close();
  10607.         this.OutputStream.close();
  10608.         this.CallBack(this.NewMessages);
  10609.     },
  10610.  
  10611.     Listener:
  10612.     {
  10613.         onStartRequest: function(request, context) {
  10614.             EBPop3AccountManager_CT2384137.NewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_FAILED;
  10615.             EBPop3AccountManager_CT2384137.Pop3Commands.State = EBEmailAccountsConsts_CT2384137.Pop3.StateStart;
  10616.         },
  10617.         onStopRequest: function(request, context, status) {
  10618.             EBPop3AccountManager_CT2384137.Finish();
  10619.         },
  10620.         onDataAvailable: function(request, context, inputStream, offset, count) {
  10621.             var strData = EBPop3AccountManager_CT2384137.InputStream.read(count);
  10622.             EBPop3AccountManager_CT2384137.Pop3Commands.Execute(strData);
  10623.         }
  10624.     },
  10625.  
  10626.     Pop3Commands:
  10627.     {
  10628.         State: null,
  10629.  
  10630.         CMD: '',
  10631.  
  10632.         Execute: function(strData) {
  10633.             //check the data
  10634.             if (EBGlobalManager_CT2384137.BeginsWith(strData, EBEmailAccountsConsts_CT2384137.Pop3.CommandOKPrefix)) {
  10635.                 if (this.State == EBEmailAccountsConsts_CT2384137.Pop3.StateStatus) {
  10636.                     this.ParseStatus(strData);
  10637.                 }
  10638.                 this.State++;
  10639.                 switch (this.State) {
  10640.                     case EBEmailAccountsConsts_CT2384137.Pop3.StateUserName:
  10641.                         this.UserName();
  10642.                         break;
  10643.                     case EBEmailAccountsConsts_CT2384137.Pop3.StatePassword:
  10644.                         this.Password();
  10645.                         break;
  10646.                     case EBEmailAccountsConsts_CT2384137.Pop3.StateStatus:
  10647.                         this.Status();
  10648.                         break;
  10649.                     case EBEmailAccountsConsts_CT2384137.Pop3.StateQuit:
  10650.                         this.Quit();
  10651.                         break;
  10652.                 }
  10653.             }
  10654.             else if (EBGlobalManager_CT2384137.BeginsWith(strData, EBEmailAccountsConsts_CT2384137.Pop3.CommandERRPrefix)) {
  10655.                 this.Quit();
  10656.             }
  10657.         },
  10658.  
  10659.         UserName: function() {
  10660.             this.CMD = 'USER ' + EBPop3AccountManager_CT2384137.UserName + EBPop3AccountManager_CT2384137.EndOfLine;
  10661.             this.RequestData();
  10662.         },
  10663.         Password: function() {
  10664.             this.CMD = 'PASS ' + EBPop3AccountManager_CT2384137.Password + EBPop3AccountManager_CT2384137.EndOfLine;
  10665.             this.RequestData();
  10666.         },
  10667.         Status: function() {
  10668.             this.CMD = 'STAT' + EBPop3AccountManager_CT2384137.EndOfLine;
  10669.             this.RequestData();
  10670.         },
  10671.         Quit: function() {
  10672.             this.CMD = 'QUIT' + EBPop3AccountManager_CT2384137.EndOfLine;
  10673.             this.RequestData();
  10674.         },
  10675.  
  10676.         RequestData: function() {
  10677.             EBPop3AccountManager_CT2384137.OutputStream.write(this.CMD, this.CMD.length);
  10678.         },
  10679.  
  10680.         ParseStatus: function(strData) {
  10681.             //parse the status string from the server to see how much messages there is:
  10682.             var arrMessages = strData.split(' ');
  10683.  
  10684.             var iNewMessages = 0;
  10685.             if (arrMessages[1])
  10686.                 iNewMessages = arrMessages[1];
  10687.  
  10688.             EBPop3AccountManager_CT2384137.NewMessages = iNewMessages;
  10689.         }
  10690.     }
  10691. };
  10692. function EBRRAccount_CT2384137(strEmail, strPassword) {
  10693.     var _pop3Account = null;
  10694.     this.MailAccount = null;
  10695.  
  10696.     //Constructor
  10697.     this.InitAccount = function(strEMail, strPassword) {
  10698.         //initialize the email account object
  10699.         this.MailAccount = new EBEMailAccount_CT2384137(EBEmailAccountsConsts_CT2384137.RR.MailURL, strEMail, strPassword);
  10700.     }
  10701.  
  10702.     this.Login = function(event) {
  10703.         //get the post data of the account
  10704.         var strPostData = this._GetPostData();
  10705.         var strMailURL = this.MailAccount.MailURL;
  10706.         var oEvent = event;
  10707.         var bIsInNewTab = oEvent.button == 1;
  10708.  
  10709.         var objCallBackFunction = function() {
  10710.             EBLinkManager_CT2384137.LoadLinkURL(oEvent, strMailURL, bIsInNewTab, strPostData);
  10711.         };
  10712.  
  10713.         //logout before navigating to the account
  10714.         this.DeleteSessionCookies();
  10715.         EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.RR.MailLogoutURL, objCallBackFunction);
  10716.     };
  10717.  
  10718.     this.Logout = function(event) {
  10719.         var strLogoutURL = EBEmailAccountsConsts_CT2384137.RR.MailLogoutURL;
  10720.         var strLoginURL = EBEmailAccountsConsts_CT2384137.RR.MailURL;
  10721.         EBLinkManager_CT2384137.LoadLinkURL(event, strLogoutURL, false, null);
  10722.         EBLinkManager_CT2384137.LoadLinkURL(event, strLoginURL, false, null);
  10723.     };
  10724.  
  10725.  
  10726.     this.DeleteSessionCookies = function() {
  10727.         var oCookieManager = Components.classes["@mozilla.org/cookieService;1"].
  10728.                   getService(Components.interfaces.nsICookieManager);
  10729.  
  10730.         //TODO if needed
  10731.     };
  10732.  
  10733.     this.GetNewMessagesCount = function(objCallBackFunction) {
  10734.         if (!_pop3Account) {
  10735.             var strUrl = EBEmailAccountsConsts_CT2384137.RR.POP3ServerUrlPattern;
  10736.             var strLocal = this._getLocalFromEmail(strEmail);
  10737.             strUrl = stringFormat(strUrl, strLocal);
  10738.             _pop3Account = new EBPop3Account_CT2384137(strEmail, strPassword, strUrl, 110);
  10739.         }
  10740.         _pop3Account.GetNewMessagesCount(objCallBackFunction);
  10741.     };
  10742.  
  10743.     this._GetPostData = function() {
  10744.         var strPostData = "account=" + strEmail + "&password=" + this.MailAccount.Password + "&client=html&variant=standard&domain=webmail.roadrunner.com&login=1&locale=en-US";
  10745.         return strPostData;
  10746.     };
  10747.  
  10748.     this._getLocalFromEmail = function(strEmail) {
  10749.         var arr = strEmail.match(/@(.*?)\./);
  10750.         if (arr && arr.length >= 2)
  10751.             return arr[1];
  10752.         else
  10753.             return "";
  10754.     };
  10755.  
  10756.     this.InitAccount(strEmail, strPassword);
  10757. };
  10758. function EBUnivisionAccount_CT2384137(strEmail, strPassword) {
  10759.     this.MailAccount = null;
  10760.  
  10761.     //Constructor
  10762.     this.InitAccount = function(strEMail, strPassword) {
  10763.         //initialize the email account object
  10764.         this.MailAccount = new EBEMailAccount_CT2384137(EBEmailAccountsConsts_CT2384137.Univision.MailURL, strEMail, strPassword);
  10765.     }
  10766.  
  10767.     this._login = function(event, objExtractNewMessages) {
  10768.         var strMailURL = this.MailAccount.MailURL;
  10769.         var that = this;
  10770.         var objCallBackFunction = function() {
  10771.             var objLogin = function(strHtml) {
  10772.                 var strPostData = that._GetPostData.call(that, strHtml);
  10773.                 if (objExtractNewMessages)
  10774.                     EBServerDataURL_CT2384137.ServerRequest(strMailURL, strPostData, null, null, objExtractNewMessages);
  10775.                 else {
  10776.                     var bIsInNewTab = event.button == 1;
  10777.                     EBLinkManager_CT2384137.LoadLinkURL(event, strMailURL, bIsInNewTab, strPostData);
  10778.                 }
  10779.             };
  10780.             EBServerDataURL_CT2384137.ServerRequest(EBEmailAccountsConsts_CT2384137.Univision.MailURL, null, null, null, objLogin);
  10781.         };
  10782.  
  10783.         //logout before navigating to the account
  10784.         this.DeleteSessionCookies();
  10785.         EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.Univision.MailLogoutURL, objCallBackFunction);
  10786.     };
  10787.  
  10788.     this.Login = function(event) {
  10789.         var oNewTab = getBrowser().addTab("chrome://iobitcom/content/wait.xul");
  10790.         getBrowser().selectedTab = oNewTab;
  10791.         var strMailURL = EBEmailAccountsConsts_CT2384137.Univision.URL;
  10792.         var bIsInNewTab = event.button == 1;
  10793.         var goToAccount = function() {
  10794.             oNewTab.linkedBrowser.contentDocument.location.href = strMailURL;
  10795.         };
  10796.         this.GetNewMessagesCount(goToAccount);
  10797.     };
  10798.  
  10799.     this.Logout = function(event) {
  10800.         var strLogoutURL = EBEmailAccountsConsts_CT2384137.Univision.MailLogoutURL;
  10801.         var strLoginURL = EBEmailAccountsConsts_CT2384137.Univision.URL;
  10802.  
  10803.         var objCallBackFunction = function() {
  10804.             EBLinkManager_CT2384137.LoadLinkURL(event, strLogoutURL, false, null);
  10805.         };
  10806.  
  10807.         EBWeb_CT2384137.NavigationWithCallBack(strLogoutURL, objCallBackFunction);
  10808.     };
  10809.  
  10810.  
  10811.     this.DeleteSessionCookies = function() {
  10812.         var oCookieManager = Components.classes["@mozilla.org/cookieService;1"].
  10813.                   getService(Components.interfaces.nsICookieManager);
  10814.  
  10815.         //TODO if needed
  10816.     };
  10817.  
  10818.     this.IsLoggedIn = function(objCallBackFunction) {
  10819.         //check if there an open window on yahoo mail and check to retrive the 
  10820.         //new messages from this window using it html document
  10821.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  10822.                         .getService(Components.interfaces.nsIWindowMediator);
  10823.  
  10824.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  10825.         while (objEnumerator.hasMoreElements()) {
  10826.             var objWindow = objEnumerator.getNext();
  10827.             var objTabBrowser = objWindow.document.getElementById('content');
  10828.             var objTab = null;
  10829.             for (var i = 0; i < objTabBrowser.browsers.length; i++) {
  10830.                 objTab = objTabBrowser.browsers[i];
  10831.                 var objTabDocument = objTab.contentWindow.document;
  10832.  
  10833.                 var strLocationURL = objTabDocument.location.href;
  10834.  
  10835.                 if (strLocationURL.toLowerCase().indexOf(EBEmailAccountsConsts_CT2384137.Univision.CheckLoginInURL) != -1) {
  10836.                     iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_ANOTHER_ACCOUNT;
  10837.                     objCallBackFunction(iNewMessages);
  10838.                     return true;
  10839.                 }
  10840.             }
  10841.         }
  10842.         return false;
  10843.     };
  10844.  
  10845.     this.GetNewMessagesCount = function(objCallBackFunction, bIsFromCheck) {
  10846.         var strMailURL = this.MailAccount.MailURL;
  10847.         var strEMail = this.MailAccount.EMail;
  10848.         var iNewMessages = null;
  10849.  
  10850.         if (this.IsLoggedIn(objCallBackFunction)) return;
  10851.  
  10852.         var objCheckFunction = function(objDoc) {
  10853.             var body = objDoc.body
  10854.             if (body) {
  10855.                 var xpathResult = null; 
  10856.                 xpathResult = body.ownerDocument.evaluate("//table/tbody/tr/td/a[@href[starts-with(.,'/scripts/mail/mailbox.mail')]]/b", body, null, 2, null);           
  10857.                 if(xpathResult && xpathResult.stringValue)
  10858.                     return parseInt(xpathResult.stringValue);
  10859.             }
  10860.  
  10861.             return null;
  10862.         };
  10863.  
  10864.         var strLogoutUrl = EBEmailAccountsConsts_CT2384137.Univision.MailLogoutURL;
  10865.         var strLoginUrl = EBEmailAccountsConsts_CT2384137.Univision.MailURL;
  10866.         var strUserName = this.MailAccount.UserName;
  10867.         var strPass = this.MailAccount.Password;
  10868.         var strUserNameFieldID = "emailField";
  10869.         var strPassFieldID = "passField";
  10870.         var strSubmitID = "loginButton";
  10871.         var strFormName = "MainForm";
  10872.         var strFrameName = null;
  10873.         if (bIsFromCheck) {
  10874.             var strBrowserID = EBComponentsConsts_CT2384137.EMailNotifierNewID;
  10875.  
  10876.             EBEmailNotifierManager_CT2384137.xulBrowser = EBXULFactory_CT2384137.CreateBrowser(strBrowserID, '', 0, 0);
  10877.             document.getElementById('mainBox').appendChild(EBEmailNotifierManager_CT2384137.xulBrowser);
  10878.         }
  10879.         
  10880.         var loginToUnivision = function() {
  10881.             EBEmailNotifierManager_CT2384137.CheckForEmails(
  10882.                                                         objCallBackFunction,
  10883.                                                         objCheckFunction,
  10884.                                                         strLogoutUrl,
  10885.                                                         strLoginUrl,
  10886.                                                         strUserName,
  10887.                                                         strPass,
  10888.                                                         strUserNameFieldID,
  10889.                                                         strPassFieldID,
  10890.                                                         strSubmitID,
  10891.                                                         strFrameName,
  10892.                                                         strFormName);
  10893.         };
  10894.         
  10895.         this._login(null, loginToUnivision);
  10896.     };
  10897.  
  10898.     this._GetPostData = function() {
  10899.         var strPostData = "email=" + strEmail;
  10900.         strPostData += "&password=" + strPassword;
  10901.         strPostData += "&loginErrorURL=/membershipservices/login.jhtml?partnerSystem=103818";
  10902.         strPostData += "&loginSuccessURL=/membershipservices/login.jhtml?partnerSystem=103818";
  10903.         strPostData += "&partnerSystem=103818";
  10904.         return strPostData;
  10905.     };
  10906.  
  10907.     this.InitAccount(strEmail, strPassword);
  10908. };
  10909. /********************* Yahoo Account ****************************/
  10910. function EBYahooAccount_CT2384137(strEMail, strPassword) {
  10911.     this.MailAccount = null;
  10912.  
  10913.     //Constructor
  10914.     this.InitAccount = function(strEMail, strPassword) {
  10915.         //initialize the email account object
  10916.         this.MailAccount = new EBEMailAccount_CT2384137(EBEmailAccountsConsts_CT2384137.Yahoo.MailURL, strEMail, strPassword);
  10917.     }
  10918.  
  10919.     this.Login = function(event) {
  10920.         //in yahoo you have to logout first before login
  10921.         //so i login after i log out using NavigationWithCallBack function
  10922.  
  10923.         //get the post data of the account
  10924.         var strPostData = this._GetYahooPostData();
  10925.         var strMailURL = this.MailAccount.MailURL;
  10926.         var oEvent = event;
  10927.         var bIsInNewTab = oEvent.button == 1;
  10928.  
  10929.  
  10930.         var objCallBackFunction = function() {
  10931.             EBLinkManager_CT2384137.LoadLinkURL(oEvent, strMailURL, bIsInNewTab, strPostData);
  10932.         };
  10933.  
  10934.         //logout before navigating to the account
  10935.         this.DeleteSessionCookies();
  10936.         EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.Yahoo.MailLogoutURL, objCallBackFunction);
  10937.     };
  10938.  
  10939.     this.Logout = function(event) {
  10940.         var strLogoutURL = EBEmailAccountsConsts_CT2384137.Yahoo.MailLogoutURL;
  10941.         var strLoginURL = EBEmailAccountsConsts_CT2384137.Yahoo.MailURL;
  10942.         EBLinkManager_CT2384137.LoadLinkURL(event, strLogoutURL, false, null);
  10943.         EBLinkManager_CT2384137.LoadLinkURL(event, strLoginURL, false, null);
  10944.     };
  10945.  
  10946.  
  10947.     this.DeleteSessionCookies = function() {
  10948.         var oCookieManager = Components.classes["@mozilla.org/cookieService;1"].
  10949.                   getService(Components.interfaces.nsICookieManager);
  10950.  
  10951.         oCookieManager.remove('.yahoo.com', 'YGCV', '/', false);
  10952.         oCookieManager.remove('.mail.yahoo.com', 'YM.Gen', '/', false);
  10953.     };
  10954.  
  10955.     this.GetNewMessagesCount = function(objCallBackFunction) {
  10956.         var strPostData = this._GetYahooPostData();
  10957.         var strMailURL = this.MailAccount.MailURL;
  10958.         var strEMail = this.MailAccount.EMail;
  10959.  
  10960.         var iNewMessages = null;
  10961.  
  10962.         //check if there an open window on yahoo mail and check to retrive the 
  10963.         //new messages from this window using it html document
  10964.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  10965.                         .getService(Components.interfaces.nsIWindowMediator);
  10966.  
  10967.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  10968.         while (objEnumerator.hasMoreElements()) {
  10969.             var objWindow = objEnumerator.getNext();
  10970.             var objTabBrowser = objWindow.document.getElementById('content');
  10971.             var objTab = null;
  10972.             for (var i = 0; i < objTabBrowser.browsers.length; i++) {
  10973.                 objTab = objTabBrowser.browsers[i];
  10974.                 var objTabDocument = objTab.contentWindow.document;
  10975.                 var strLocationURL = objTabDocument.location.href;
  10976.  
  10977.                 if (strLocationURL.toLowerCase().indexOf(EBEmailAccountsConsts_CT2384137.Yahoo.CheckLoginInURL) != -1) {
  10978.  
  10979.                     iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_ANOTHER_ACCOUNT;
  10980.  
  10981.                     objCallBackFunction(iNewMessages);
  10982.                     return;
  10983.                 }
  10984.             }
  10985.         }
  10986.  
  10987.         //if there isn't any page open in this account - i check it in the regular way
  10988.         //perform logut and then login to the account
  10989.         var objServerResponseFunction = function(strData, objRequest) {
  10990.             iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_FAILED;
  10991.             //check classic first, if failed, check beta
  10992.             //find the new messages using regular expression on the page
  10993.             var arrResults = strData.match(/\<a\s+.*\>\s*Inbox\s*\D*\(\s*(\d+)\s*\)\s*\D*\<\/a\>/i);
  10994.             if (arrResults && arrResults.length > 1) {
  10995.                 var strInbox = arrResults[1];
  10996.                 var iInbox = parseInt(strInbox);
  10997.                 if (!isNaN(iInbox))
  10998.                     iNewMessages = iInbox;
  10999.  
  11000.                 objCallBackFunction(iNewMessages);
  11001.             }
  11002.             else
  11003.                 EBYahooBetaAccountManager_CT2384137.CheckFromWebService(strData, objCallBackFunction);
  11004.         };
  11005.  
  11006.         var objLogoutWithCallBackFunction = function() {
  11007.             EBServerDataURL_CT2384137.ServerRequest(strMailURL,
  11008.                                         strPostData,
  11009.                                         null,
  11010.                                         null,
  11011.                                         objServerResponseFunction);
  11012.         };
  11013.  
  11014.  
  11015.         this.DeleteSessionCookies();
  11016.         EBWeb_CT2384137.NavigationWithCallBack(EBEmailAccountsConsts_CT2384137.Yahoo.MailLogoutURL, objLogoutWithCallBackFunction);
  11017.     };
  11018.  
  11019.     this._GetYahooPostData = function() {
  11020.         var strPostData = '.tries=1&.intl=us&.v=0&hasMsgr=0&.chkP=Y&.done=http://mail.yahoo.com&.persistent=Y&login=' + this.MailAccount.UserName + '&passwd=' + this.MailAccount.Password;
  11021.         return strPostData;
  11022.     };
  11023.  
  11024.     this.InitAccount(strEMail, strPassword);
  11025.  
  11026. };
  11027.  
  11028. var EBYahooBetaAccountManager_CT2384137 =
  11029. {
  11030.     CheckFromWebService: function(strSource, objCallBackFunction) {
  11031.         var iNewMessages = EBEmailAccountsConsts_CT2384137.LOGIN_FAILED;
  11032.         var xmlSoap = this.GetSoapXML(strSource);
  11033.         var xmlNode = null;
  11034.         for (var i = 0; i < xmlSoap.childNodes.length; i++) {
  11035.             xmlNode = xmlSoap.childNodes[i];
  11036.             if (EBXML_CT2384137.GetStringXml(xmlNode).toLowerCase().indexOf(name = "inbox") != -1) {
  11037.                 break;
  11038.             }
  11039.         }
  11040.  
  11041.         var strInbox = xmlNode.getAttribute("unread");
  11042.         if (strInbox) {
  11043.             var iInbox = parseInt(strInbox);
  11044.             if (!isNaN(iInbox))
  11045.                 iNewMessages = iInbox;
  11046.         }
  11047.  
  11048.         objCallBackFunction(iNewMessages);
  11049.     },
  11050.  
  11051.     GetSoapXML: function(strSource) {
  11052.         var iStart = strSource.indexOf("<ListFoldersResponse>");
  11053.         var iEnd = strSource.indexOf("</ListFoldersResponse>");
  11054.         var strXml = strSource.substring(iStart, iEnd + 22);
  11055.         var xmlDoc = EBXML_CT2384137.GetXmlDocument(strXml);
  11056.         return xmlDoc.documentElement;
  11057.     }
  11058. };
  11059. //consts Class:
  11060. var EBEmailAccountsConsts_CT2384137 =
  11061. {
  11062.     LOGIN_FAILED: -1,
  11063.     LOGIN_ANOTHER_ACCOUNT: -2,
  11064.  
  11065.     CheckURL: 'http://www.conduit.com',
  11066.  
  11067.     DomainCaptionDelimiter: '/',
  11068.  
  11069.     GMail:
  11070.     {
  11071.         MailURL: 'https://www.google.com/accounts/ServiceLoginAuth',
  11072.         MailURLnoAuth: 'https://www.google.com/accounts/ServiceLogin',
  11073.         MailLogoutURL: 'https://mail.google.com/mail/?logout&hl=en',
  11074.         EMailDomain: ['@gmail.com', '@googlemail.com'],
  11075.         EMailDomainCaption: ['.com'],
  11076.         FeedURL: 'https://gmail.google.com/gmail/feed/atom',
  11077.         AccountName: 'Gmail'
  11078.     },
  11079.  
  11080.     Yahoo:
  11081.     {
  11082.         MailURL: 'http://login.yahoo.com/config/login',
  11083.         MailLogoutURL: 'http://login.yahoo.com/config/login?logout=1',
  11084.         EMailDomain: ['@yahoo.com', '@yahoo.co.uk', '@yahoo.com.au', '@yahoo.ca'],
  11085.         EMailDomainCaption: ['.com', '.co.uk', '.com.au', '.ca'],
  11086.         AccountName: 'Yahoo',
  11087.         CheckLoginInURL: '.mail.yahoo.'
  11088.     },
  11089.  
  11090.     Hotmail:
  11091.     {
  11092.         MailURL: 'http://www.hotmail.com/',
  11093.         MailLogoutURL: 'http://login.live.com/logout.srf',
  11094.         EMailDomain: ['@hotmail.com', '@hotmail.co.uk', '@msn.com', '@msn.co.uk'],
  11095.         EMailDomainCaption: ['.com', '.co.uk'],
  11096.         AccountName: 'Hotmail',
  11097.         URL: 'http://login.live.com/login.srf?id=2',
  11098.         CheckLoginInURL: ['.hotmail.msn.', '.mail.live.']
  11099.     },
  11100.  
  11101.     Pop3:
  11102.     {
  11103.         AccountName: 'POP3',
  11104.         StateStart: 0,
  11105.         StateUserName: 1,
  11106.         StatePassword: 2,
  11107.         StateStatus: 3,
  11108.         StateQuit: 4,
  11109.         DefaultPort: 110,
  11110.         CommandOKPrefix: '+OK',
  11111.         CommandERRPrefix: '-ERR'
  11112.     },
  11113.  
  11114.     RR:
  11115.     {
  11116.         MailURL: 'https://webmail.roadrunner.com',
  11117.         MailLogoutURL: 'http://webmail.roadrunner.com/do/logout?l=en-US&v=standard',
  11118.         EMailDomain: ['@rr.com'],
  11119.         EMailDomainCaption: ['.com'],
  11120.         AccountName: 'RR',
  11121.         URL: 'https://webmail.roadrunner.com',
  11122.         CheckLoginInURL: ['webmail.roadrunner.'],
  11123.         POP3ServerUrlPattern: 'pop-server.{0}.rr.com'
  11124.     },
  11125.  
  11126.     AOL:
  11127.     {
  11128.         MailURL: 'http://mail.aol.com',
  11129.         MailLogoutURL: 'http://my.screenname.aol.com/_cqr/logout/mcLogout.psp',
  11130.         EMailDomain: ['@aol.com'],
  11131.         EMailDomainCaption: ['aol.com'],
  11132.         AccountName: 'AOL',
  11133.         URL: 'https://my.screenname.aol.com/_cqr/login/login.psp',
  11134.         CheckLoginInURL: ['webmail.aol.']
  11135.     },
  11136.  
  11137.     Univision:
  11138.     {
  11139.         MailURL: 'http://www.univision.com/content/channel.jhtml?schid=15',
  11140.         MailLogoutURL: 'http://micorreo.univision.com/scripts/mail/Outblaze.mail?logout=1&.noframe=1&a=1&',
  11141.         EMailDomain: ['@univision.com'],
  11142.         EMailDomainCaption: ['univision.com'],
  11143.         AccountName: 'Univision',
  11144.         URL: 'https://www.univision.com/membershipservices/CRMLoginAPI.jhtml',
  11145.         CheckLoginInURL: ['micorreo.univision.com']
  11146.     }
  11147. };
  11148.  
  11149. var EBEmailAccountsTypes_CT2384137 =
  11150. {
  11151.     GMail: 1,
  11152.     Yahoo: 2,
  11153.     Hotmail: 3,
  11154.     Pop3: 4,
  11155.     RR: 5,
  11156.     AOL: 6,
  11157.     Univision: 7
  11158. };
  11159.  
  11160.  
  11161. //the base class of the email notifier hierarchy
  11162. function EBEMailAccount_CT2384137(strMailURL, strEMail, strPassword) {
  11163.     this.EMail = strEMail;
  11164.     this.Password = strPassword;
  11165.     this.MailURL = strMailURL;
  11166.  
  11167.     this.UserName = '';
  11168.  
  11169.     this.Init = function() {
  11170.         this.UserName = EBEMailNotifierManager_CT2384137.GetUserNameByEMail(this.EMail);
  11171.     }
  11172.  
  11173.     this.Init();
  11174. };
  11175. var EmailWebListener_CT2384137 =
  11176. {
  11177.     QueryInterface: function(aIID) {
  11178.         if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
  11179.        aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
  11180.        aIID.equals(Components.interfaces.nsISupports))
  11181.             return this;
  11182.         throw Components.results.NS_NOINTERFACE;
  11183.     },
  11184.  
  11185.     onStateChange: function(aProgress, aRequest, aFlag, aStatus) {
  11186.         //get the url
  11187.         var strUrl = aRequest.name;
  11188.         
  11189.         if (aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP)
  11190.             EBEmailNotifierManager_CT2384137.DocumentComplete(aProgress, aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_DOCUMENT);
  11191.         
  11192.         return 0;
  11193.     },
  11194.  
  11195.     onLocationChange: function(aProgress, aRequest, aURI) {
  11196.         // This fires when the location bar changes i.e load event is confirmed
  11197.         // or when the user switches tabs
  11198.         return 0;
  11199.     },
  11200.  
  11201.     // For definitions of the remaining functions see XulPlanet.com
  11202.     onProgressChange: function() { return 0; },
  11203.     onStatusChange: function() { return 0; },
  11204.     onSecurityChange: function() { return 0; },
  11205.     onLinkIconAvailable: function() { return 0; }
  11206. };
  11207. var EBEMailNotifierDialogsConsts_CT2384137 = 
  11208. {    
  11209.     WindowTypeAttributeName        : 'EBEMailNotifierDialogs_CT2384137',
  11210.     
  11211.     XULDialogsDirectoryName        : 'EMailNotifierDialogs',
  11212.     
  11213.     SettingsDialog                :     
  11214.     {
  11215.         FileName                    : 'enSettings.xul',
  11216.         Name                        : 'EBEmailNotifierXULSettingsDialogName_CT2384137',
  11217.         SupportSubjectCaption        : 'E-mail Notifier Feedback [Firefox]',
  11218.         TreeCellPasswordAttribute    : 'TreeCellPasswordAttribute',
  11219.         TreeCellTypeAttribute        : 'TreeCellTypeAttribute',
  11220.         TreeCellAutoLoginAttribute    : 'TreeCellAutoLoginAttribute',
  11221.         TreeCellServerAttribute        : 'TreeCellServerAttribute'
  11222.     },
  11223.     
  11224.     AddEditDialog                :
  11225.     {
  11226.         FileName                    : 'enAddEdit.xul',
  11227.         Name                        : 'EBEmailNotifierXULAddEditDialogName_CT2384137',
  11228.         ModeAdd                        : 'ADD',
  11229.         ModeEdit                    : 'EDIT'
  11230.     },
  11231.     
  11232.     ConfirmDialog                : 
  11233.     {
  11234.         FileName                    : 'enConfirm.xul',    
  11235.         Name                        : 'EBEmailNotifierXULConfirmDialogName_CT2384137',
  11236.         MismatchErrorTitle            : 'Check e-mail password',
  11237.         MismatchErrorContent        : 'Incorrect password!\nPlease enter the password that you have defined in this account'
  11238.     },
  11239.     
  11240.     TestAccountDialog            :
  11241.     {
  11242.         FileName                    : 'enTestAccount.xul',
  11243.         ID                            : 'EBEmailNotifierXULTestAccountDialogID',
  11244.         Name                        : 'EBEmailNotifierXULTestAccountDialogName_CT2384137',
  11245.         AccountNameAlias            : '{{ACCOUNT_NAME}}'
  11246.     }
  11247. }
  11248.  
  11249. //the default values of the dialogs captions
  11250. //if there is xml it will change for the languages support!
  11251. var EBEMailNotifierDialogsCaption_CT2384137 = 
  11252. {
  11253.     SettingsDialog        :
  11254.     {
  11255.         Yes                        : 'Yes',
  11256.         No                        : 'No'
  11257.     },
  11258.     
  11259.     
  11260.     AddEditDialog        :
  11261.     {
  11262.         EmailAddress                        : 'E-mail Address:',
  11263.         Pop3EMailAddress                    : 'User Name:',
  11264.         AutoLogin                            : 'Auto Login (will not ask for password when logging into my account)',
  11265.         Pop3AutoLogin                        : 'Open Default Mail Client',
  11266.         ErrorTitleAlertMsg                    : 'Invalid E-mail address',
  11267.         ErrorMsgIncorrectEMailAddress        : 'The E-mail address you have entered appears to be incorrect',
  11268.         ErrorMsgEmailAlreadyExist            : 'You have already defined an account with that E-mail address',
  11269.         ErrorMsgPOP3AlreadyExist            : 'You have already defined that account',
  11270.         ErrorMsgEmailAddressNotSupported    : 'The E-mail address is not supported. We currently support Hotmail (.com/.co.uk), Gmail, and Yahoo(.com/.co.uk/.com.au/.ca).',
  11271.         ErrorMsgEmailTypeIncorrect            : 'The E-mail address and the account type do not match.'
  11272.         
  11273.     },
  11274.     
  11275.     TestAccountDialog    :
  11276.     {
  11277.         TasksSuccessFinishMsg        : 'Mail account tested successfully',
  11278.         TasksFailureFinishMsg        : 'Failed testing mail account',
  11279.         TasksSuccess                : 'Completed',
  11280.         TasksFailure                : 'Failed',
  11281.         TaskSuccessDone             : 'Done',
  11282.         ButtonOK                    : 'OK',
  11283.         TestWarningMsg1                : 'Please logout of all your ' + EBEMailNotifierDialogsConsts_CT2384137.TestAccountDialog.AccountNameAlias + ' accounts before testing your account settings.'
  11284.     }
  11285.     
  11286. }
  11287.  
  11288.  
  11289.  
  11290. var EBEMailNotifierDialogsManager_CT2384137 = 
  11291. {
  11292.     GetDialogWindow : function(strWindowName)
  11293.     {
  11294.         var strWindowType = EBEMailNotifierDialogsConsts_CT2384137.WindowTypeAttributeName;
  11295.         return EBGlobalManager_CT2384137.GetXULWindowByTypeAndName(strWindowType,strWindowName);
  11296.     },
  11297.     
  11298.         
  11299.     OpenSettingsDialog : function(objParentWindow, isFromToolbarOptions, strCompType)
  11300.     {
  11301.         //check if one of the email notifier windows is open to make the focus on it
  11302.         var objSettingsWindow        = this.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.Name);
  11303.         var objAddEditWindow        = this.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.Name);
  11304.         var objTestAccountWindow    = this.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.TestAccountDialog.Name);
  11305.         var objConfirmWindow        = this.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.ConfirmDialog.Name);
  11306.         
  11307.         
  11308.         //check if the dialogs already open in a different browser to set 
  11309.         //focus on them - the order is important! of course (from the last dialog shown to the first)
  11310.         if(objTestAccountWindow)
  11311.             objTestAccountWindow.focus();
  11312.         else if(objConfirmWindow)
  11313.             objConfirmWindow.focus();
  11314.         else if(objAddEditWindow)
  11315.             objAddEditWindow.focus();
  11316.         else if(objSettingsWindow)
  11317.             objSettingsWindow.focus();
  11318.         else
  11319.         {
  11320.             var strXULSettingsDialogChromePath    = EBGlobalConsts_CT2384137.ChromeContentPath + EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.FileName;
  11321.             
  11322.             //adding the EBEMailNotifierDialogsXULEvents as a window argument 
  11323.             //and retrieving it from the code inside the xul window using window.arguments[iIndex]
  11324.             objParentWindow.openDialog(strXULSettingsDialogChromePath,
  11325.                                             EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.Name,
  11326.                                             'modal,centerscreen,chrome,resizable=no',
  11327.                                             isFromToolbarOptions, strCompType);
  11328.         }
  11329.     },
  11330.     
  11331.     OpenAddEditDialog : function(oSettingsWindow,strMode,objAccountData)
  11332.     {
  11333.         if(oSettingsWindow)
  11334.         {
  11335.             var strXULAddEditDialogChromePath    = EBGlobalConsts_CT2384137.ChromeContentPath + EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.FileName;
  11336.             
  11337.             oSettingsWindow.openDialog(strXULAddEditDialogChromePath,
  11338.                                         EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.Name,
  11339.                                         'modal,centerscreen,chrome,resizable=no',
  11340.                                         strMode,
  11341.                                         objAccountData);
  11342.         }
  11343.         
  11344.     },
  11345.     
  11346.     OpenConfirmDialog : function(oAddEditWindow,oAccountData)
  11347.     {
  11348.         if(oAddEditWindow)
  11349.         {
  11350.             var strXULConfirmDialogChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + EBEMailNotifierDialogsConsts_CT2384137.ConfirmDialog.FileName;
  11351.             
  11352.             oAddEditWindow.openDialog(strXULConfirmDialogChromePath,
  11353.                                         EBEMailNotifierDialogsConsts_CT2384137.ConfirmDialog.Name,
  11354.                                         'modal,centerscreen,chrome,resizable=no',
  11355.                                         oAccountData,
  11356.                                         oAddEditWindow.document);
  11357.         }
  11358.         
  11359.     },
  11360.     
  11361.     OpenTestAccountDialog : function(oAddEditWindow)
  11362.     {
  11363.         if(oAddEditWindow)
  11364.         {    
  11365.             var strXULTestAccountDialogChromePath    = EBGlobalConsts_CT2384137.ChromeContentPath + EBEMailNotifierDialogsConsts_CT2384137.TestAccountDialog.FileName;
  11366.             
  11367.             oAddEditWindow.openDialog(strXULTestAccountDialogChromePath,
  11368.                                         EBEMailNotifierDialogsConsts_CT2384137.TestAccountDialog.Name,
  11369.                                         'modal,centerscreen,chrome,resizable=no',
  11370.                                         oAddEditWindow.document);
  11371.         }
  11372.  
  11373.     }
  11374. };
  11375.  
  11376. var EBEMailNotifierDialogsXULEvents_CT2384137 =
  11377. {
  11378.     OnLoadSettingsDialog: function(event) {
  11379.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  11380.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  11381.         if (dialogsDirection)
  11382.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "EBEmailNotifierXULSettingsDialogID");
  11383.  
  11384.         EmailNotifierLanguagePack_CT2384137.SettingsDialog();
  11385.  
  11386.         //set the global accounts object
  11387.         window.m_oDialogsMailAccountsCollection = new EBArrayCollection_CT2384137();
  11388.  
  11389.         //loads the accounts from the file and set the xul tree according it
  11390.         //take them from the browser window(this window is the window of the xul dialog so the 
  11391.         //EBEMailNotifierToolbarManager_CT2384137.MailAccountsCollection is not define in this scope!!
  11392.         var oBrowserWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  11393.         var objMailAccountsCollection = oBrowserWindow.EBEMailNotifierToolbarManager_CT2384137.MailAccountsCollection;
  11394.  
  11395.         if (objMailAccountsCollection) {
  11396.             var arrAccounts = objMailAccountsCollection.Arr;
  11397.  
  11398.             var objAccountData = null;
  11399.  
  11400.             for (var i = 0; i < arrAccounts.length; i++) {
  11401.                 objAccountData = arrAccounts[i];
  11402.  
  11403.                 this.AddMailAccountTreeItem(objAccountData, false);
  11404.             }
  11405.         }
  11406.  
  11407.  
  11408.         //check if it's open from toolbar options to disable the toolbar option button:
  11409.         var isFromToolbarOptions = null;
  11410.  
  11411.         try {
  11412.             isFromToolbarOptions = window.arguments[0];
  11413.         }
  11414.         catch (ex) {
  11415.             isFromToolbarOptions = false;
  11416.         }
  11417.  
  11418.         if (isFromToolbarOptions)
  11419.             document.getElementById('btnToolbarOptions').disabled = true;
  11420.  
  11421.         //set the check event to the sound checkbox
  11422.         var objCheckBoxPlaySound = document.getElementById('checkPlaySound');
  11423.         //add event to the checkbox
  11424.         objCheckBoxPlaySound.addEventListener("CheckboxStateChange",
  11425.                                         EBEMailNotifierDialogsXULEvents_CT2384137.OnCheckBoxSettingsPlaySoundChange,
  11426.                                         false);
  11427.  
  11428.  
  11429.         //set the check interval according to the save value from pref
  11430.         this.SetCheckIntervalSelection();
  11431.         //set the sound xul elements according to the saved sound (in the prefs)
  11432.         this.SetSoundSelection();
  11433.     },
  11434.  
  11435.     OnCheckBoxSettingsPlaySoundChange: function(event) {
  11436.         var objCheckBoxPlaySound = document.getElementById('checkPlaySound');
  11437.         var objRadioGroupSound = document.getElementById('radioGroupSound');
  11438.  
  11439.         var bCheck = objCheckBoxPlaySound.checked;
  11440.  
  11441.  
  11442.         var objButtonSoundChooseFile = document.getElementById('btnSoundChooseFile');
  11443.         var objButtonSoundPlay = document.getElementById('btnSoundPlay');
  11444.         var objTextBoxSoundFilePath = document.getElementById('txtSoundFilePath');
  11445.  
  11446.         objRadioGroupSound.disabled = !bCheck;
  11447.         objButtonSoundChooseFile.disabled = !bCheck;
  11448.         objButtonSoundPlay.disabled = !bCheck;
  11449.         objTextBoxSoundFilePath.disabled = !bCheck;
  11450.  
  11451.     },
  11452.  
  11453.     OnCommandSettingsChooseSoundFile: function(event) {
  11454.         var objRadioGroupSound = document.getElementById('radioGroupSound');
  11455.         var objRadioSoundChoose = document.getElementById('radSoundChoose');
  11456.  
  11457.         var objTextBoxSoundFilePath = document.getElementById('txtSoundFilePath');
  11458.  
  11459.         var nsIFilePicker = Components.interfaces.nsIFilePicker;
  11460.         var objFilePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  11461.         objFilePicker.init(window, "Select a File", nsIFilePicker.modeOpen);
  11462.         objFilePicker.appendFilter("Wav Files (*.wav)", "*.wav");
  11463.  
  11464.         //set the display dir path to what he chose
  11465.         //and if he doesn't so to the windows xp media path as the default path:
  11466.         var strDisplayDir = objTextBoxSoundFilePath.value;
  11467.         if (!strDisplayDir) {
  11468.             strDisplayDir = EBWindows_CT2384137.GetWindowsMediaPath();
  11469.         }
  11470.         var objDisplayDir = EBDirIO_CT2384137.open(strDisplayDir);
  11471.         if (objDisplayDir) {
  11472.             objFilePicker.displayDirectory = objDisplayDir;
  11473.         }
  11474.  
  11475.         var iResult = objFilePicker.show();
  11476.         if (iResult == nsIFilePicker.returnOK) {
  11477.             objRadioGroupSound.selectedItem = objRadioSoundChoose;
  11478.             var strPath = objFilePicker.file.path;
  11479.  
  11480.             objTextBoxSoundFilePath.value = strPath;
  11481.         }
  11482.     },
  11483.  
  11484.     OnCommandSettingsPlaySoundFile: function(event) {
  11485.         var objRadioGroupSound = document.getElementById('radioGroupSound');
  11486.         var objRadioSoundChoose = document.getElementById('radSoundChoose');
  11487.         var objRadioSoundDefault = document.getElementById('radSoundUseDefault');
  11488.  
  11489.         var strFilePath = '';
  11490.         if (objRadioGroupSound.selectedItem == objRadioSoundChoose) {
  11491.             strFilePath = document.getElementById('txtSoundFilePath').value;
  11492.         }
  11493.         else if (objRadioGroupSound.selectedItem == objRadioSoundDefault) {
  11494.             strFilePath = EBEMailNotifierConsts_CT2384137.Sound.DefaultWavChromePath;
  11495.         }
  11496.  
  11497.         if (strFilePath) {
  11498.             EBGlobalManager_CT2384137.PlaySound(strFilePath);
  11499.         }
  11500.     },
  11501.  
  11502.  
  11503.  
  11504.     OnUnLoadSettingsDialog: function(event) {
  11505.         window.m_oDialogsMailAccountsCollection = null;
  11506.  
  11507.         //usage
  11508.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  11509.         objWindow.EBUsageEmailNotifier_CT2384137.OnMenuClose(window.arguments[0]);
  11510.     },
  11511.  
  11512.     OnCommandSettingsOKButton: function() {
  11513.         try {
  11514.             this.SaveCheckIntervalSelection();
  11515.             this.SaveSoundSelection();
  11516.             var oBrowserWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  11517.             oBrowserWindow.EBEMailNotifierToolbarManager_CT2384137.OnCommandSettingsOKButton(window.m_oDialogsMailAccountsCollection);
  11518.         }
  11519.         catch (ex) { }
  11520.     },
  11521.  
  11522.     SetCheckIntervalSelection: function() {
  11523.         //get value from pref
  11524.         var iMinutesFromPref = EBEMailNotifierToolbarManager_CT2384137.GetCheckIntervalPref();
  11525.         if (!iMinutesFromPref || !isFinite(iMinutesFromPref)) {
  11526.             // set default to 5 minutes
  11527.             iMinutesFromPref = 5;
  11528.         }
  11529.  
  11530.         var oComboInterval = document.getElementById('cmbCheckInterval');
  11531.         var oPopupMenu = oComboInterval.firstChild;
  11532.  
  11533.         var oMenuItem = null;
  11534.         for (var i = 0; i < oPopupMenu.childNodes.length; i++) {
  11535.             oMenuItem = oPopupMenu.childNodes[i];
  11536.             if (oMenuItem.getAttribute('label') == iMinutesFromPref) {
  11537.                 oComboInterval.selectedItem = oMenuItem;
  11538.                 break;
  11539.             }
  11540.         }
  11541.     },
  11542.  
  11543.     SetSoundSelection: function() {
  11544.         var objCheckBoxPlaySound = document.getElementById('checkPlaySound');
  11545.  
  11546.         var objRadioGroupSound = document.getElementById('radioGroupSound');
  11547.         var objRadioSoundChoose = document.getElementById('radSoundChoose');
  11548.         var objRadioSoundDefault = document.getElementById('radSoundUseDefault');
  11549.         var objTextBoxSoundFilePath = document.getElementById('txtSoundFilePath');
  11550.  
  11551.         var strSound = EBEMailNotifierToolbarManager_CT2384137.GetSoundPref();
  11552.  
  11553.         if (strSound != EBEMailNotifierConsts_CT2384137.Sound.NONE) {
  11554.             objCheckBoxPlaySound.checked = true;
  11555.             if (!strSound || strSound == EBEMailNotifierConsts_CT2384137.Sound.DEFAULT) {
  11556.                 objRadioGroupSound.selectedItem = objRadioSoundDefault;
  11557.             }
  11558.             else {
  11559.                 objTextBoxSoundFilePath.value = strSound;
  11560.                 objRadioGroupSound.selectedItem = objRadioSoundChoose;
  11561.             }
  11562.         }
  11563.         else {
  11564.             objCheckBoxPlaySound.checked = false;
  11565.         }
  11566.  
  11567.  
  11568.     },
  11569.  
  11570.     SaveCheckIntervalSelection: function() {
  11571.         var oComboInterval = document.getElementById('cmbCheckInterval');
  11572.  
  11573.         var oSelectedMenuItem = oComboInterval.selectedItem;
  11574.         var iMinutesValue = oSelectedMenuItem.getAttribute('label');
  11575.  
  11576.         EBEMailNotifierToolbarManager_CT2384137.SaveCheckIntervalPref(iMinutesValue);
  11577.     },
  11578.  
  11579.     //save the sound 
  11580.     SaveSoundSelection: function() {
  11581.  
  11582.         var objCheckBoxPlaySound = document.getElementById('checkPlaySound');
  11583.  
  11584.         var objRadioGroupSound = document.getElementById('radioGroupSound');
  11585.         var objRadioSoundChoose = document.getElementById('radSoundChoose');
  11586.         var objRadioSoundDefault = document.getElementById('radSoundUseDefault');
  11587.         var objTextBoxSoundFilePath = document.getElementById('txtSoundFilePath');
  11588.  
  11589.         var strSound = '';
  11590.  
  11591.         if (objCheckBoxPlaySound.checked) {
  11592.             var strTxtFilePathValue = objTextBoxSoundFilePath.value;
  11593.             if (objRadioGroupSound.selectedItem == objRadioSoundDefault || !strTxtFilePathValue) {
  11594.                 strSound = EBEMailNotifierConsts_CT2384137.Sound.DEFAULT;
  11595.             }
  11596.             else if (objRadioGroupSound.selectedItem == objRadioSoundChoose) {
  11597.                 strSound = strTxtFilePathValue;
  11598.             }
  11599.         }
  11600.         else {
  11601.             strSound = EBEMailNotifierConsts_CT2384137.Sound.NONE;
  11602.         }
  11603.  
  11604.  
  11605.         EBEMailNotifierToolbarManager_CT2384137.SaveSoundPref(strSound);
  11606.     },
  11607.  
  11608.  
  11609.  
  11610.     AccountDataObjectToTreeRow: function(objSettingsDocument, objAccountData) {
  11611.         var strAccountName = objAccountData.AccountName;
  11612.         var strEMailAddress = objAccountData.EMailAddress;
  11613.         var strPassword = objAccountData.Password;
  11614.         var iAccountType = objAccountData.AccountType;
  11615.         var isAutoLogin = objAccountData.AutoLogin;
  11616.         var strPop3Server = objAccountData.Pop3Server;
  11617.  
  11618.         var objTreeRow = objSettingsDocument.createElement('treerow');
  11619.  
  11620.         var objTreeCellAccountName = objSettingsDocument.createElement('treecell');
  11621.         objTreeCellAccountName.setAttribute('label', strAccountName);
  11622.  
  11623.         var objTreeCellEMailAddress = objSettingsDocument.createElement('treecell');
  11624.         objTreeCellEMailAddress.setAttribute('label', strEMailAddress);
  11625.         //save the password in the email treecell as an attribute
  11626.         objTreeCellEMailAddress.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellPasswordAttribute, strPassword);
  11627.         //save the pop3 server url as an attribute
  11628.         objTreeCellEMailAddress.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellServerAttribute, strPop3Server);
  11629.  
  11630.  
  11631.         var strAccountType = EBEMailNotifierManager_CT2384137.GetAccountNameByType(iAccountType);
  11632.         var objTreeCellAccountType = objSettingsDocument.createElement('treecell');
  11633.         objTreeCellAccountType.setAttribute('label', strAccountType);
  11634.         //save the actual type in an attribute for retrieving it.
  11635.         objTreeCellAccountType.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellTypeAttribute, iAccountType);
  11636.  
  11637.  
  11638.         var strAutoLogin = isAutoLogin ? EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.Yes : EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.No;
  11639.         var objTreeCellAutoLogin = objSettingsDocument.createElement('treecell');
  11640.         objTreeCellAutoLogin.setAttribute('label', strAutoLogin);
  11641.         //save the actual auto login value in an attribute for retrieving it.
  11642.         objTreeCellAutoLogin.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellAutoLoginAttribute, isAutoLogin);
  11643.  
  11644.         //build the dom elements
  11645.         objTreeRow.appendChild(objTreeCellAccountName);
  11646.         objTreeRow.appendChild(objTreeCellEMailAddress);
  11647.         objTreeRow.appendChild(objTreeCellAccountType);
  11648.         objTreeRow.appendChild(objTreeCellAutoLogin);
  11649.  
  11650.         return objTreeRow;
  11651.     },
  11652.  
  11653.     OnSelectSettingsMailAccountsTree: function(event) {
  11654.         this.SetSettingsEditDeleteButtonsDisabled(false);
  11655.     },
  11656.  
  11657.     OnDoubleClickSettingsMailAccountsTree: function(event) {
  11658.         //this is how you illustrate double click on a tree row element:
  11659.         var objTreeMailAccounts = document.getElementById('treeMailAccounts');
  11660.         var iIndex = objTreeMailAccounts.treeBoxObject.getRowAt(event.clientX, event.clientY);
  11661.  
  11662.         if (iIndex > -1) {
  11663.             var objAccountDataToEdit = window.m_oDialogsMailAccountsCollection.GetItem(iIndex);
  11664.  
  11665.             EBEMailNotifierDialogsManager_CT2384137.OpenAddEditDialog(window, EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.ModeEdit,
  11666.                                                                     objAccountDataToEdit);
  11667.         }
  11668.     },
  11669.  
  11670.     SetSettingsEditDeleteButtonsDisabled: function(isDisabled) {
  11671.         var objEditButton = document.getElementById('btnEdit');
  11672.         var objEditDelete = document.getElementById('btnDelete');
  11673.         objEditButton.disabled = isDisabled;
  11674.         objEditDelete.disabled = isDisabled;
  11675.     },
  11676.  
  11677.     OnCommandSettingsToolbarOptionsButton: function(event) {
  11678.         //get this with the most recent browser window cause this function 
  11679.         //is not in the email notifier scope
  11680.         var oRecentBrowserWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  11681.  
  11682.         //Usage
  11683.         oRecentBrowserWindow.EBUsageEmailNotifier_CT2384137.OnClickToolbarOptions();
  11684.  
  11685.         //Open dialog
  11686.         oRecentBrowserWindow.EBToolbarOptionsStaticDialogManager_CT2384137.OpenDialog(window, true);
  11687.     },
  11688.  
  11689.     OnCommandSettingsAddButton: function(event) {
  11690.         EBEMailNotifierDialogsManager_CT2384137.OpenAddEditDialog(window, EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.ModeAdd, null);
  11691.     },
  11692.  
  11693.     OnCommandSettingsEditButton: function(event) {
  11694.         var objTreeMailAccounts = document.getElementById('treeMailAccounts');
  11695.         var iIndex = objTreeMailAccounts.currentIndex;
  11696.         var objAccountDataToEdit = window.m_oDialogsMailAccountsCollection.GetItem(iIndex);
  11697.  
  11698.         EBEMailNotifierDialogsManager_CT2384137.OpenAddEditDialog(window, EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.ModeEdit,
  11699.                                                                     objAccountDataToEdit);
  11700.     },
  11701.  
  11702.     OnCommandSettingsDeleteButton: function(event) {
  11703.         var objTreeMailAccounts = document.getElementById('treeMailAccounts');
  11704.         var objTreeItemToDelete = this.GetSelectedTreeItem(objTreeMailAccounts);
  11705.  
  11706.         if (objTreeItemToDelete) {
  11707.             var iDeleteItemIndex = objTreeMailAccounts.currentIndex;
  11708.             var objTreeChildrenParent = objTreeItemToDelete.parentNode;
  11709.             objTreeChildrenParent.removeChild(objTreeItemToDelete);
  11710.  
  11711.             //delete it from the data object:
  11712.             window.m_oDialogsMailAccountsCollection.RemoveElement(iDeleteItemIndex);
  11713.  
  11714.             var iIndexToSelect = -1;
  11715.  
  11716.             if (iDeleteItemIndex > 0)//check to select the previous element:
  11717.             {
  11718.                 iIndexToSelect = iDeleteItemIndex - 1;
  11719.             }
  11720.             else if (objTreeChildrenParent.childNodes.length > 0)//check to select the next element
  11721.             {
  11722.                 iIndexToSelect = iDeleteItemIndex;
  11723.             }
  11724.  
  11725.             if (iIndexToSelect != -1)//select the treeItem
  11726.             {
  11727.                 var objPrevElementTreeItem = objTreeChildrenParent.childNodes[iIndexToSelect];
  11728.                 this.SelectTreeItem(objPrevElementTreeItem);
  11729.             }
  11730.             else //if there isn't any elements left i disable the add-edit buttons
  11731.             {
  11732.                 this.SetSettingsEditDeleteButtonsDisabled(true);
  11733.             }
  11734.  
  11735.  
  11736.  
  11737.         }
  11738.     },
  11739.  
  11740.     GetSelectedTreeItem: function(objTree) {
  11741.         var objTreeItem = null;
  11742.         var iIndex = objTree.currentIndex;
  11743.         if (iIndex != -1) {
  11744.             objTreeItem = objTree.contentView.getItemAtIndex(iIndex);
  11745.         }
  11746.         return objTreeItem;
  11747.     },
  11748.  
  11749.     OnLoadAddEditDialog: function(event) {
  11750.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  11751.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  11752.         if (dialogsDirection)
  11753.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "EBEmailNotifierXULAddEditDialogID");
  11754.  
  11755.         EmailNotifierLanguagePack_CT2384137.AddEditDialog();
  11756.         var objEMailTextBox = document.getElementById('txtEMail');
  11757.  
  11758.         var objRadioGroupEMails = document.getElementById('radioGroupEMails');
  11759.         var objRadioHotmail = document.getElementById('radHotmail');
  11760.         var objRadioYahoo = document.getElementById('radYahoo');
  11761.         var objRadioGmail = document.getElementById('radGMail');
  11762.         var objRadioRR = document.getElementById('radRR');
  11763.         var objRadioAOL = document.getElementById('radAOL');
  11764.         var objRadioUnivision = document.getElementById('radUnivision');
  11765.         var objRadioPop3 = document.getElementById('radPop3');
  11766.  
  11767.         if (MODE == EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.ModeEdit) {
  11768.             var objPasswordTextBox = document.getElementById('txtPassword');
  11769.             var objAccountNameTextBox = document.getElementById('txtAccountName');
  11770.             var objTextBoxPop3MailServer = document.getElementById('txtPop3MailServer');
  11771.             var objTextBoxPop3Port = document.getElementById('txtPop3Port');
  11772.  
  11773.             var objAutoLoginCheckBox = document.getElementById('checkAutoLogin');
  11774.             var objButtonTestAccount = document.getElementById('btnTestAccount');
  11775.             var objButtonOK = document.getElementById('btnOK');
  11776.  
  11777.             //set the values
  11778.             objEMailTextBox.value = m_oAccountData.EMailAddress;
  11779.             objPasswordTextBox.value = m_oAccountData.Password;
  11780.             objAccountNameTextBox.value = m_oAccountData.AccountName;
  11781.  
  11782.             //check account type
  11783.             if (m_oAccountData.AccountType == EBEmailAccountsTypes_CT2384137.GMail)
  11784.                 objRadioGroupEMails.selectedItem = objRadioGmail;
  11785.             else if (m_oAccountData.AccountType == EBEmailAccountsTypes_CT2384137.Yahoo)
  11786.                 objRadioGroupEMails.selectedItem = objRadioYahoo;
  11787.             else if (m_oAccountData.AccountType == EBEmailAccountsTypes_CT2384137.Hotmail)
  11788.                 objRadioGroupEMails.selectedItem = objRadioHotmail;
  11789.             else if (m_oAccountData.AccountType == EBEmailAccountsTypes_CT2384137.RR)
  11790.                 objRadioGroupEMails.selectedItem = objRadioRR;
  11791.             else if (m_oAccountData.AccountType == EBEmailAccountsTypes_CT2384137.AOL)
  11792.                 objRadioGroupEMails.selectedItem = objRadioAOL;
  11793.             else if (m_oAccountData.AccountType == EBEmailAccountsTypes_CT2384137.Univision)
  11794.                 objRadioGroupEMails.selectedItem = objRadioUnivision;
  11795.             else if (m_oAccountData.AccountType == EBEmailAccountsTypes_CT2384137.Pop3) {
  11796.                 objRadioGroupEMails.selectedItem = objRadioPop3;
  11797.                 objTextBoxPop3MailServer.value = m_oAccountData.Pop3Server;
  11798.  
  11799.                 var iPort = EBEmailAccountsConsts_CT2384137.Pop3.DefaultPort;
  11800.                 var iPortFromObject = m_oAccountData.Pop3Port;
  11801.                 if (iPortFromObject) {
  11802.                     iPort = iPortFromObject;
  11803.                 }
  11804.                 objTextBoxPop3Port.value = iPort;
  11805.             }
  11806.  
  11807.             objAutoLoginCheckBox.checked = m_oAccountData.AutoLogin;
  11808.  
  11809.             objEMailTextBox.select();
  11810.  
  11811.             objButtonTestAccount.disabled = false;
  11812.             objButtonOK.disabled = false;
  11813.  
  11814.  
  11815.             //if it's edit mode we are set the checkbox an oncheckcahnged event 
  11816.             //for the confirm dialog
  11817.             var oCheckBoxAutoLogin = document.getElementById('checkAutoLogin');
  11818.             oCheckBoxAutoLogin.addEventListener("CheckboxStateChange",
  11819.                                         EBEMailNotifierDialogsXULEvents_CT2384137.OnCheckBoxStateChangeAutoLogin,
  11820.                                         false);
  11821.  
  11822.         }
  11823.         else {
  11824.             objRadioGroupEMails.selectedItem = objRadioHotmail;
  11825.         }
  11826.         objEMailTextBox.focus();
  11827.     },
  11828.  
  11829.     OnCheckBoxStateChangeAutoLogin: function(event) {
  11830.         var oCheckBox = event.target;
  11831.         if (oCheckBox.checked) {
  11832.             EBEMailNotifierDialogsManager_CT2384137.OpenConfirmDialog(window, m_oAccountData);
  11833.         }
  11834.     },
  11835.  
  11836.  
  11837.     OnAcceptConfirmDialog: function(event) {
  11838.         try {
  11839.  
  11840.             var oTextBoxPassword = document.getElementById('txtPassword');
  11841.             var strPassword = oTextBoxPassword.value;
  11842.             var strAccountDataPassword = m_oAccountData.Password;
  11843.  
  11844.             if (strPassword != strAccountDataPassword) {
  11845.                 var strTitle = EBEMailNotifierDialogsConsts_CT2384137.ConfirmDialog.MismatchErrorTitle;
  11846.                 var strMsg = EBEMailNotifierDialogsConsts_CT2384137.ConfirmDialog.MismatchErrorContent;
  11847.                 EBGlobalManager_CT2384137.Alert(window, strTitle, strMsg);
  11848.                 m_bIsCloseAcceptDialog = false;
  11849.             }
  11850.             else {
  11851.                 m_bIsCloseAcceptDialog = true;
  11852.             }
  11853.         }
  11854.         catch (ex) {
  11855.             //if there is any error we want to close the dialog
  11856.             m_bIsCloseAcceptDialog = true;
  11857.         }
  11858.  
  11859.         return m_bIsCloseAcceptDialog;
  11860.  
  11861.     },
  11862.  
  11863.     OnLoadConfirmDialog: function(event) {
  11864.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  11865.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  11866.         if (dialogsDirection)
  11867.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "EBEmailNotifierXULConfirmAccountDialogID");
  11868.  
  11869.         EmailNotifierLanguagePack_CT2384137.ConfirmDialog();
  11870.     },
  11871.  
  11872.     OnUnloadConfirmDialog: function(event) {
  11873.         //in the onload document we set the addedit dialog autologin checkbox
  11874.         //according to the matching of the password if the user didn't
  11875.         //click on the accept button
  11876.         if (!m_bIsCloseAcceptDialog) {
  11877.             var oCheckBoxAutoLogin = m_oAddEditDocument.getElementById('checkAutoLogin');
  11878.             oCheckBoxAutoLogin.checked = false;
  11879.         }
  11880.     },
  11881.  
  11882.     OnInputAddEditEmailTextBox: function(event) {
  11883.         var objTextBoxEmail = event.target;
  11884.         var strEmail = objTextBoxEmail.value;
  11885.         var objTextBoxAccountName = document.getElementById('txtAccountName');
  11886.  
  11887.         var objRadioGroupEMails = document.getElementById('radioGroupEMails');
  11888.         var objRadioHotmail = document.getElementById('radHotmail');
  11889.         var objRadioYahoo = document.getElementById('radYahoo');
  11890.         var objRadioGmail = document.getElementById('radGMail');
  11891.         var objRadioAOL = document.getElementById('radAOL');
  11892.         var objRadioRR = document.getElementById('radRR');
  11893.         var objRadioUnivision = document.getElementById('radUnivision');
  11894.         objTextBoxAccountName.value = strEmail;
  11895.  
  11896.         var isGMailDmain = EBEMailNotifierManager_CT2384137.IsEMailDomain(EBEmailAccountsConsts_CT2384137.GMail, strEmail);
  11897.         var isYahooDomain = EBEMailNotifierManager_CT2384137.IsEMailDomain(EBEmailAccountsConsts_CT2384137.Yahoo, strEmail);
  11898.         var isHotmailDomain = EBEMailNotifierManager_CT2384137.IsEMailDomain(EBEmailAccountsConsts_CT2384137.Hotmail, strEmail);
  11899.         var isAOLDomain = EBEMailNotifierManager_CT2384137.IsEMailDomain(EBEmailAccountsConsts_CT2384137.AOL, strEmail);
  11900.         var isUnivisionDomain = EBEMailNotifierManager_CT2384137.IsEMailDomain(EBEmailAccountsConsts_CT2384137.Univision, strEmail);
  11901.         var isRRDomain = EBEMailNotifierManager_CT2384137.IsRRDomain(strEmail);
  11902.  
  11903.         if (isRRDomain)
  11904.             objRadioGroupEMails.selectedItem = objRadioRR;
  11905.         else if (isGMailDmain)
  11906.             objRadioGroupEMails.selectedItem = objRadioGmail;
  11907.         else if (isYahooDomain)
  11908.             objRadioGroupEMails.selectedItem = objRadioYahoo;
  11909.         else if (isHotmailDomain)
  11910.             objRadioGroupEMails.selectedItem = objRadioHotmail;
  11911.         else if (isAOLDomain)
  11912.             objRadioGroupEMails.selectedItem = objRadioAOL;
  11913.         else if (isUnivisionDomain)
  11914.             objRadioGroupEMails.selectedItem = objRadioUnivision;
  11915.  
  11916.  
  11917.         this.SetTestAccountOKButtonsState();
  11918.     },
  11919.  
  11920.     OnInputAddEditPasswordTextBox: function(event) {
  11921.         this.SetTestAccountOKButtonsState();
  11922.     },
  11923.  
  11924.     OnInputAddEditAccountNameTextBox: function(event) {
  11925.         this.SetTestAccountOKButtonsState();
  11926.     },
  11927.  
  11928.     OnInputAddEditPop3MailServerTextBox: function(event) {
  11929.         this.SetTestAccountOKButtonsState();
  11930.     },
  11931.  
  11932.     IsAddEditPop3Mode: function() {
  11933.         var objRadioGroupEMails = document.getElementById('radioGroupEMails');
  11934.         var objRadioPop3 = document.getElementById('radPop3');
  11935.  
  11936.         return objRadioGroupEMails.selectedItem == objRadioPop3;
  11937.     },
  11938.  
  11939.     OnSelectAddEditRadioGroupEMails: function(event) {
  11940.  
  11941.         var objRadioGroupEMails = document.getElementById('radioGroupEMails');
  11942.         var objRadioHotmail = document.getElementById('radHotmail');
  11943.         var objRadioYahoo = document.getElementById('radYahoo');
  11944.         var objRadioGmail = document.getElementById('radGMail');
  11945.         var objRadioRR = document.getElementById('radRR');
  11946.         var objRadioAOL = document.getElementById('radAOL');
  11947.         var objRadioUnivision = document.getElementById('radUnivision');
  11948.         var objRadioPOP3 = document.getElementById('radPop3');
  11949.  
  11950.         var objLabelSupportedDomains = document.getElementById('lblSupportedDomains');
  11951.  
  11952.         //set the caption domains:
  11953.         var strCaptionDomains = '';
  11954.  
  11955.         if (objRadioGroupEMails.selectedItem == objRadioHotmail)
  11956.             strCaptionDomains = EBEMailNotifierManager_CT2384137.GetHotmailDomainCaption();
  11957.         else if (objRadioGroupEMails.selectedItem == objRadioYahoo)
  11958.             strCaptionDomains = EBEMailNotifierManager_CT2384137.GetYahooDomainCaption();
  11959.         else if (objRadioGroupEMails.selectedItem == objRadioGmail)
  11960.             strCaptionDomains = EBEMailNotifierManager_CT2384137.GetGMailDomainCaption();
  11961.         else if (objRadioGroupEMails.selectedItem == objRadioRR)
  11962.             strCaptionDomains = EBEMailNotifierManager_CT2384137.GetRRDomainCaption();
  11963.         else if (objRadioGroupEMails.selectedItem == objRadioAOL)
  11964.             strCaptionDomains = EBEMailNotifierManager_CT2384137.GetAOLDomainCaption();
  11965.         else if (objRadioGroupEMails.selectedItem == objRadioUnivision)
  11966.             strCaptionDomains = EBEMailNotifierManager_CT2384137.GetUnivisionDomainCaption();
  11967.         else if (objRadioGroupEMails.selectedItem == objRadioPOP3)
  11968.             strCaptionDomains = '';
  11969.  
  11970.         objLabelSupportedDomains.setAttribute('value', strCaptionDomains);
  11971.  
  11972.         var objRowPop3MailServer = document.getElementById('rowPop3MailServer');
  11973.         var objCheckBoxAutoLogin = document.getElementById('checkAutoLogin');
  11974.         var objLabelEMail = document.getElementById('lblEMail');
  11975.  
  11976.         var oTextBoxPop3MailServerURL = document.getElementById('txtPop3MailServer');
  11977.         if (this.IsAddEditPop3Mode()) {
  11978.             objLabelEMail.setAttribute('value', EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.Pop3EMailAddress);
  11979.             objRowPop3MailServer.style.visibility = '';
  11980.             objCheckBoxAutoLogin.setAttribute('accesskey', 'O');
  11981.             objCheckBoxAutoLogin.setAttribute('label', EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.Pop3AutoLogin);
  11982.             oTextBoxPop3MailServerURL.focus();
  11983.         }
  11984.         else {
  11985.             objLabelEMail.setAttribute('value', EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.EmailAddress);
  11986.             objRowPop3MailServer.style.visibility = 'hidden';
  11987.             objCheckBoxAutoLogin.setAttribute('accesskey', 'A');
  11988.             objCheckBoxAutoLogin.setAttribute('label', EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.AutoLogin);
  11989.         }
  11990.  
  11991.         //when selection check the state of the buttons:
  11992.         this.SetTestAccountOKButtonsState();
  11993.     },
  11994.  
  11995.     SetTestAccountOKButtonsState: function() {
  11996.         var objButtonTestAccount = document.getElementById('btnTestAccount');
  11997.         var objButtonOK = document.getElementById('btnOK');
  11998.  
  11999.         var objTextBoxEmail = document.getElementById('txtEMail');
  12000.         var objTextBoxPassword = document.getElementById('txtPassword');
  12001.         var objTextBoxAccountName = document.getElementById('txtAccountName');
  12002.         var objTextBoxPop3MailServer = document.getElementById('txtPop3MailServer');
  12003.  
  12004.         //get the values from the text boxes
  12005.         var strEMail = objTextBoxEmail.value;
  12006.         var strPassword = objTextBoxPassword.value;
  12007.         var strAccountName = objTextBoxAccountName.value;
  12008.  
  12009.         var strPop3MailServer = objTextBoxPop3MailServer.value;
  12010.  
  12011.         if (EBGlobalManager_CT2384137.TotalTrim(strEMail) != '' &&
  12012.             strPassword != '' &&
  12013.             EBGlobalManager_CT2384137.TotalTrim(strAccountName) != '') {
  12014.             objButtonTestAccount.disabled = false;
  12015.             objButtonOK.disabled = false;
  12016.         }
  12017.         else {
  12018.             objButtonTestAccount.disabled = true;
  12019.             objButtonOK.disabled = true;
  12020.         }
  12021.  
  12022.         if (this.IsAddEditPop3Mode()) {
  12023.             if (EBGlobalManager_CT2384137.TotalTrim(strPop3MailServer) != '') {
  12024.                 objButtonTestAccount.disabled = false;
  12025.                 objButtonOK.disabled = false;
  12026.             }
  12027.             else {
  12028.                 objButtonTestAccount.disabled = true;
  12029.                 objButtonOK.disabled = true;
  12030.             }
  12031.         }
  12032.  
  12033.  
  12034.     },
  12035.  
  12036.     OnCommandAddEditTestAccountButton: function(event) {
  12037.         if (this.IsValidEMailAddress()) {
  12038.             EBEMailNotifierDialogsManager_CT2384137.OpenTestAccountDialog(window);
  12039.         }
  12040.     },
  12041.  
  12042.     IsValidEMailAddress: function() {
  12043.         var objTextBoxEmail = document.getElementById('txtEMail');
  12044.         var strEMail = objTextBoxEmail.value;
  12045.  
  12046.  
  12047.         //if it's pop3 there isn't any check
  12048.         if (this.IsAddEditPop3Mode()) {
  12049.             var strUserName = strEMail;
  12050.             var strMailServerURL = document.getElementById('txtPop3MailServer').value;
  12051.             if (this.IsPop3AccountExists(strUserName, strMailServerURL)) {
  12052.                 EBGlobalManager_CT2384137.Alert(window, EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorTitleAlertMsg,
  12053.                             EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgPOP3AlreadyExist);
  12054.                 objTextBoxEmail.select();
  12055.                 return false;
  12056.             }
  12057.             else {
  12058.                 return true;
  12059.             }
  12060.         }
  12061.  
  12062.  
  12063.         //check incorrect email
  12064.         if (!EBGlobalManager_CT2384137.IsValidEMail(strEMail)) {
  12065.             EBGlobalManager_CT2384137.Alert(window, EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorTitleAlertMsg,
  12066.                                 EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgIncorrectEMailAddress);
  12067.             objTextBoxEmail.select();
  12068.             return false;
  12069.         }
  12070.  
  12071.         //check supported email
  12072.         if (!EBEMailNotifierManager_CT2384137.IsSupportedEMailAccounts(strEMail)) {
  12073.             EBGlobalManager_CT2384137.Alert(window, EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorTitleAlertMsg,
  12074.                                 EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgEmailAddressNotSupported);
  12075.             objTextBoxEmail.select();
  12076.             return false;
  12077.         }
  12078.  
  12079.         //check for existing email(using the data object account)
  12080.         if (this.IsEMailExists(strEMail)) {
  12081.             EBGlobalManager_CT2384137.Alert(window, EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorTitleAlertMsg,
  12082.                                 EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgEmailAlreadyExist);
  12083.             objTextBoxEmail.select();
  12084.             return false;
  12085.         }
  12086.  
  12087.         //check if the radio button suit to the account:
  12088.  
  12089.         //check the desirable type
  12090.         var iAcceptableAccountType = EBEMailNotifierManager_CT2384137.GetAccountTypeByEMail(strEMail);
  12091.         //check actual radio selection
  12092.         var iActualAccountType = 0;
  12093.         var objRadioGroupEMails = document.getElementById('radioGroupEMails');
  12094.         var objRadioHotmail = document.getElementById('radHotmail');
  12095.         var objRadioYahoo = document.getElementById('radYahoo');
  12096.         var objRadioGmail = document.getElementById('radGMail');
  12097.         var objRadioRR = document.getElementById('radRR');
  12098.         var objRadioAOL = document.getElementById('radAOL');
  12099.         var objRadioUnivision = document.getElementById('radUnivision');
  12100.  
  12101.  
  12102.         if (objRadioGroupEMails.selectedItem == objRadioHotmail)
  12103.             iActualAccountType = EBEmailAccountsTypes_CT2384137.Hotmail;
  12104.         else if (objRadioGroupEMails.selectedItem == objRadioYahoo)
  12105.             iActualAccountType = EBEmailAccountsTypes_CT2384137.Yahoo;
  12106.         else if (objRadioGroupEMails.selectedItem == objRadioGmail)
  12107.             iActualAccountType = EBEmailAccountsTypes_CT2384137.GMail;
  12108.         else if (objRadioGroupEMails.selectedItem == objRadioRR)
  12109.             iActualAccountType = EBEmailAccountsTypes_CT2384137.RR;
  12110.         else if (objRadioGroupEMails.selectedItem == objRadioAOL)
  12111.             iActualAccountType = EBEmailAccountsTypes_CT2384137.AOL;
  12112.         else if (objRadioGroupEMails.selectedItem == objRadioUnivision)
  12113.             iActualAccountType = EBEmailAccountsTypes_CT2384137.Univision;
  12114.  
  12115.         if (iAcceptableAccountType != iActualAccountType) {
  12116.             EBGlobalManager_CT2384137.Alert(window, EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorTitleAlertMsg,
  12117.                                 EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgEmailTypeIncorrect);
  12118.             objRadioGroupEMails.focus();
  12119.             return false;
  12120.         }
  12121.  
  12122.         return true;
  12123.     },
  12124.  
  12125.     IsEMailExists: function(strEMail) {
  12126.         //get the dialogs mail account collection:
  12127.         var oMailAccountsColl = this.GetDialogsMailAccountCollection();
  12128.         if (oMailAccountsColl) {
  12129.             var arrAccounts = oMailAccountsColl.Arr;
  12130.             var objAccountData = null;
  12131.             for (var i = 0; i < arrAccounts.length; i++) {
  12132.                 objAccountData = arrAccounts[i];
  12133.                 if (m_oAccountData != objAccountData && objAccountData.EMailAddress.toLowerCase() == strEMail.toLowerCase())
  12134.                     return true;
  12135.             }
  12136.         }
  12137.  
  12138.         return false;
  12139.     },
  12140.  
  12141.     IsPop3AccountExists: function(strUserName, strMailServerURL) {
  12142.         var oMailAccountsColl = this.GetDialogsMailAccountCollection();
  12143.         if (oMailAccountsColl) {
  12144.             var arrAccounts = oMailAccountsColl.Arr;
  12145.             var objAccountData = null;
  12146.             for (var i = 0; i < arrAccounts.length; i++) {
  12147.                 objAccountData = arrAccounts[i];
  12148.                 if (m_oAccountData != objAccountData &&
  12149.                 objAccountData.EMailAddress == strUserName &&
  12150.                 objAccountData.Pop3Server.toLowerCase() == strMailServerURL.toLowerCase()) {
  12151.                     return true;
  12152.                 }
  12153.             }
  12154.         }
  12155.  
  12156.         return false;
  12157.  
  12158.     },
  12159.  
  12160.     GetIndexByAccountDataObject: function(objCurrentAccountData) {
  12161.         var oMailAccountsColl = this.GetDialogsMailAccountCollection();
  12162.         if (oMailAccountsColl) {
  12163.             var arrAccounts = oMailAccountsColl.Arr;
  12164.             var objAccountData = null;
  12165.             for (var i = 0; i < arrAccounts.length; i++) {
  12166.                 objAccountData = arrAccounts[i];
  12167.                 if (objAccountData == objCurrentAccountData) {
  12168.                     return i;
  12169.                 }
  12170.             }
  12171.         }
  12172.  
  12173.         return -1;
  12174.     },
  12175.  
  12176.     OnCommandAddEditOKButton: function(event) {
  12177.         try {
  12178.             var objTextBoxEmail = document.getElementById('txtEMail');
  12179.             var strEMailAddress = objTextBoxEmail.value;
  12180.  
  12181.             if (!this.IsValidEMailAddress()) {
  12182.                 return false;
  12183.             }
  12184.  
  12185.             var strPassword = document.getElementById('txtPassword').value;
  12186.             var strAccountName = document.getElementById('txtAccountName').value;
  12187.  
  12188.             var strPop3ServerURL = null;
  12189.             var strPop3Port = null;
  12190.             if (this.IsAddEditPop3Mode()) {
  12191.                 strPop3ServerURL = document.getElementById('txtPop3MailServer').value;
  12192.                 strPop3Port = document.getElementById('txtPop3Port').value;
  12193.             }
  12194.  
  12195.             var objRadioGroupEMails = document.getElementById('radioGroupEMails');
  12196.             var objRadioHotmail = document.getElementById('radHotmail');
  12197.             var objRadioYahoo = document.getElementById('radYahoo');
  12198.             var objRadioGmail = document.getElementById('radGMail');
  12199.             var objRadioAOL = document.getElementById('radAOL');
  12200.             var objRadioRR = document.getElementById('radRR');
  12201.             var objRadioUnivision = document.getElementById('radUnivision');
  12202.             var objRadioPop3 = document.getElementById('radPop3');
  12203.  
  12204.             var iAccountType;
  12205.             if (objRadioGroupEMails.selectedItem == objRadioGmail) {
  12206.                 iAccountType = EBEmailAccountsTypes_CT2384137.GMail;
  12207.             }
  12208.             else if (objRadioGroupEMails.selectedItem == objRadioYahoo) {
  12209.                 iAccountType = EBEmailAccountsTypes_CT2384137.Yahoo;
  12210.             }
  12211.             else if (objRadioGroupEMails.selectedItem == objRadioHotmail) {
  12212.                 iAccountType = EBEmailAccountsTypes_CT2384137.Hotmail;
  12213.             }
  12214.             else if (objRadioGroupEMails.selectedItem == objRadioRR) {
  12215.                 iAccountType = EBEmailAccountsTypes_CT2384137.RR;
  12216.             }
  12217.             else if (objRadioGroupEMails.selectedItem == objRadioAOL) {
  12218.                 iAccountType = EBEmailAccountsTypes_CT2384137.AOL;
  12219.             }
  12220.             else if (objRadioGroupEMails.selectedItem == objRadioUnivision) {
  12221.                 iAccountType = EBEmailAccountsTypes_CT2384137.Univision;
  12222.             }
  12223.             else if (objRadioGroupEMails.selectedItem == objRadioPop3) {
  12224.                 iAccountType = EBEmailAccountsTypes_CT2384137.Pop3;
  12225.             }
  12226.  
  12227.             var isAutoLogin = document.getElementById('checkAutoLogin').checked;
  12228.  
  12229.             if (MODE == EBEMailNotifierDialogsConsts_CT2384137.AddEditDialog.ModeAdd) {
  12230.                 var objAccountDataToAdd = new EBEMailAccountDataObject_CT2384137(strAccountName,
  12231.                                                             strEMailAddress,
  12232.                                                             strPassword,
  12233.                                                             iAccountType,
  12234.                                                             isAutoLogin,
  12235.                                                             null,
  12236.                                                             null,
  12237.                                                             strPop3ServerURL,
  12238.                                                             strPop3Port);
  12239.  
  12240.                 this.AddMailAccountTreeItem(objAccountDataToAdd, true);
  12241.             }
  12242.             else {
  12243.                 this.EditMailAccountTreeItem(strAccountName, strEMailAddress, strPassword, iAccountType, isAutoLogin, strPop3ServerURL, strPop3Port, m_oAccountData);
  12244.             }
  12245.         }
  12246.         catch (ex) { }
  12247.  
  12248.         return true;
  12249.  
  12250.     },
  12251.  
  12252.     OnLoadTestAccountDialog: function(event) {
  12253.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  12254.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  12255.         if (dialogsDirection)
  12256.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "EBEmailNotifierXULTestAccountDialogID");
  12257.  
  12258.         //set focus to the ok button
  12259.         document.getElementById('btnOKCancel').focus();
  12260.         EmailNotifierLanguagePack_CT2384137.TestAccountDialog();
  12261.         //open the test from the browser window to prevent bug
  12262.         //when the user close the test before the end of the process
  12263.         if (objWindow) {
  12264.             objWindow.EmailNotifierLanguagePack_CT2384137.TestAccountDialogSub();
  12265.             TestAccountDialogCheck_CT2384137.Start(document, m_oAddEditDialogDocument);
  12266.         }
  12267.     },
  12268.  
  12269.     OnUnloadTestAccountDialog: function(event) {
  12270.         //open the test from the browser window to prevent bug
  12271.         //when the user close the test before the end of the process
  12272.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  12273.         if (objWindow) {
  12274.             objWindow.TestAccountDialogCheck_CT2384137.NullifyMemebers();
  12275.         }
  12276.     },
  12277.  
  12278.     //get the dialog account collection which define in the settings dialog!
  12279.     GetDialogsMailAccountCollection: function() {
  12280.         var objSettingsWindow = EBEMailNotifierDialogsManager_CT2384137.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.Name);
  12281.  
  12282.         return objSettingsWindow.m_oDialogsMailAccountsCollection;
  12283.     },
  12284.  
  12285.     AddMailAccountTreeItem: function(objAccountData, isSelectItem) {
  12286.         var objSettingsWindow = EBEMailNotifierDialogsManager_CT2384137.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.Name);
  12287.  
  12288.         if (!objSettingsWindow) {
  12289.             return;
  12290.         }
  12291.  
  12292.         var objSettingsDocument = objSettingsWindow.document;
  12293.  
  12294.         var objTreeChildrenMailAccounts = objSettingsDocument.getElementById('treeChildrenMailAccounts');
  12295.  
  12296.         var objTreeItem = objSettingsDocument.createElement('treeitem');
  12297.  
  12298.         var objTreeRow = this.AccountDataObjectToTreeRow(objSettingsDocument, objAccountData);
  12299.  
  12300.         objTreeItem.appendChild(objTreeRow);
  12301.  
  12302.         objTreeChildrenMailAccounts.appendChild(objTreeItem);
  12303.  
  12304.  
  12305.         if (isSelectItem) {
  12306.             this.SelectTreeItem(objTreeItem);
  12307.         }
  12308.  
  12309.  
  12310.         //add the data to the dialog collection
  12311.         objSettingsWindow.m_oDialogsMailAccountsCollection.AppendElement(objAccountData);
  12312.  
  12313.     },
  12314.  
  12315.     EditMailAccountTreeItem: function(strAccountName, strEMailAddress, strPassword, iAccountType, isAutoLogin, strPop3ServerURL, strPop3Port, objAccountData) {
  12316.         var objSettingsWindow = EBEMailNotifierDialogsManager_CT2384137.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.Name);
  12317.  
  12318.         if (!objSettingsWindow) return;
  12319.  
  12320.         var objSettingsDocument = objSettingsWindow.document;
  12321.  
  12322.         var iIndexToEdit = this.GetIndexByAccountDataObject(objAccountData);
  12323.  
  12324.         if (iIndexToEdit == -1) return;
  12325.  
  12326.         var objTreeChildren = objSettingsDocument.getElementById('treeChildrenMailAccounts');
  12327.  
  12328.         var objTreeRowCollection = objTreeChildren.getElementsByTagName('treerow');
  12329.  
  12330.         var objTreeRowToEdit = objTreeRowCollection.item(iIndexToEdit);
  12331.  
  12332.         var objTreeCellAccountName = objTreeRowToEdit.childNodes[0];
  12333.         var objTreeCellEMailAddress = objTreeRowToEdit.childNodes[1];
  12334.         var objTreeCellAccountType = objTreeRowToEdit.childNodes[2];
  12335.         var objTreeCellAutoLogin = objTreeRowToEdit.childNodes[3];
  12336.  
  12337.         objTreeCellAccountName.setAttribute('label', strAccountName);
  12338.  
  12339.         objTreeCellEMailAddress.setAttribute('label', strEMailAddress);
  12340.         objTreeCellEMailAddress.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellPasswordAttribute, strPassword);
  12341.         objTreeCellEMailAddress.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellServerAttribute, strPop3ServerURL);
  12342.  
  12343.         var strAccountType = EBEMailNotifierManager_CT2384137.GetAccountNameByType(iAccountType);
  12344.         objTreeCellAccountType.setAttribute('label', strAccountType);
  12345.         objTreeCellAccountType.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellTypeAttribute, iAccountType);
  12346.  
  12347.         var strIsAutoLogin = isAutoLogin ? EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.Yes : EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.No;
  12348.         objTreeCellAutoLogin.setAttribute('label', strIsAutoLogin);
  12349.         objTreeCellAutoLogin.setAttribute(EBEMailNotifierDialogsConsts_CT2384137.SettingsDialog.TreeCellAutoLoginAttribute, isAutoLogin);
  12350.  
  12351.         //set the data object
  12352.         objAccountData.AccountName = strAccountName;
  12353.         objAccountData.EMailAddress = strEMailAddress;
  12354.         objAccountData.Password = strPassword;
  12355.         objAccountData.AccountType = iAccountType;
  12356.         objAccountData.AutoLogin = isAutoLogin;
  12357.         objAccountData.Pop3Server = strPop3ServerURL;
  12358.         objAccountData.Pop3Port = strPop3Port;
  12359.  
  12360.     },
  12361.  
  12362.     SelectTreeItem: function(objTreeItem) {
  12363.         var objTree = objTreeItem.parentNode.parentNode;
  12364.         var iIndex = objTree.contentView.getIndexOfItem(objTreeItem);
  12365.         objTree.view.selection.select(iIndex);
  12366.         objTree.focus();
  12367.     },
  12368.  
  12369.     Test: function(doc) {
  12370.  
  12371.     },
  12372.  
  12373.     OnClickHelp: function(event) {
  12374.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  12375.         //usage
  12376.         objWindow.EBUsageEmailNotifier_CT2384137.OnClickFeedback();
  12377.  
  12378.         //send feedback
  12379.         var strUrl = objWindow.EBActionManager_CT2384137.GetWebServerURL("help");
  12380.         objWindow.EBWeb_CT2384137.LoadURLInNewWindow(strUrl, null);
  12381.     }
  12382. };
  12383.  
  12384. var TestAccountDialogCheck_CT2384137 =
  12385. {
  12386.     EMailAccountType: null,
  12387.  
  12388.     EMail: '',
  12389.  
  12390.     Password: '',
  12391.  
  12392.     Pop3ServerURL: '',
  12393.  
  12394.     Pop3Port: 0,
  12395.  
  12396.     TestDialogDocument: null,
  12397.  
  12398.     AddEditDialogDocument: null,
  12399.  
  12400.     IsTestAccountDialogExists: function() {
  12401.         var objTestAccountWindow = EBEMailNotifierDialogsManager_CT2384137.GetDialogWindow(EBEMailNotifierDialogsConsts_CT2384137.TestAccountDialog.Name);
  12402.         return objTestAccountWindow ? true : false;
  12403.     },
  12404.  
  12405.     Start: function(oTestDialogDocument, oAddEditDialogDocument) {
  12406.         this.TestDialogDocument = oTestDialogDocument;
  12407.         this.AddEditDialogDocument = oAddEditDialogDocument;
  12408.  
  12409.         var objTextBoxEmail = this.AddEditDialogDocument.getElementById('txtEMail');
  12410.         var objTextBoxPassword = this.AddEditDialogDocument.getElementById('txtPassword');
  12411.         var objTextBoxPop3MailServer = this.AddEditDialogDocument.getElementById('txtPop3MailServer');
  12412.         var objTextBoxPop3Port = this.AddEditDialogDocument.getElementById('txtPop3Port');
  12413.  
  12414.         var objRadioGroupEMails = this.AddEditDialogDocument.getElementById('radioGroupEMails');
  12415.         var objRadioHotmail = this.AddEditDialogDocument.getElementById('radHotmail');
  12416.         var objRadioYahoo = this.AddEditDialogDocument.getElementById('radYahoo');
  12417.         var objRadioGmail = this.AddEditDialogDocument.getElementById('radGMail');
  12418.         var objRadioAOL = this.AddEditDialogDocument.getElementById('radAOL');
  12419.         var objRadioRR = this.AddEditDialogDocument.getElementById('radRR');
  12420.         var objRadioUnivision = this.AddEditDialogDocument.getElementById('radUnivision');
  12421.         var objRadioPop3 = this.AddEditDialogDocument.getElementById('radPop3');
  12422.  
  12423.         var iEMailAccountType = null;
  12424.         if (objRadioGroupEMails.selectedItem == objRadioGmail) {
  12425.             iEMailAccountType = EBEmailAccountsTypes_CT2384137.GMail;
  12426.         }
  12427.         else if (objRadioGroupEMails.selectedItem == objRadioYahoo) {
  12428.             iEMailAccountType = EBEmailAccountsTypes_CT2384137.Yahoo;
  12429.         }
  12430.         else if (objRadioGroupEMails.selectedItem == objRadioHotmail) {
  12431.             iEMailAccountType = EBEmailAccountsTypes_CT2384137.Hotmail;
  12432.         }
  12433.         else if (objRadioGroupEMails.selectedItem == objRadioRR) {
  12434.             iEMailAccountType = EBEmailAccountsTypes_CT2384137.RR;
  12435.         }
  12436.         else if (objRadioGroupEMails.selectedItem == objRadioAOL) {
  12437.             iEMailAccountType = EBEmailAccountsTypes_CT2384137.AOL;
  12438.         }
  12439.         else if (objRadioGroupEMails.selectedItem == objRadioUnivision) {
  12440.             iEMailAccountType = EBEmailAccountsTypes_CT2384137.Univision;
  12441.         }
  12442.         else if (objRadioGroupEMails.selectedItem == objRadioPop3) {
  12443.             iEMailAccountType = EBEmailAccountsTypes_CT2384137.Pop3;
  12444.         }
  12445.  
  12446.         //get the values from the text boxes
  12447.         var strEMail = objTextBoxEmail.value;
  12448.         var strPassword = objTextBoxPassword.value;
  12449.         var strPop3MailServerURL = objTextBoxPop3MailServer.value;
  12450.         var strPop3Port = objTextBoxPop3Port.value;
  12451.  
  12452.         //set the class members for later use
  12453.         this.EMailAccountType = iEMailAccountType;
  12454.         this.EMail = strEMail;
  12455.         this.Password = strPassword;
  12456.         this.Pop3ServerURL = strPop3MailServerURL;
  12457.         this.Pop3Port = strPop3Port;
  12458.  
  12459.         this.StepOneCheckInternetConnection(oTestDialogDocument);
  12460.     },
  12461.  
  12462.     StepOneCheckInternetConnection: function(oTestDialogDocument) {
  12463.         //check internet connection:
  12464.         var strCheckURL = EBEmailAccountsConsts_CT2384137.CheckURL;
  12465.  
  12466.         var oCallBackFunction = function(oData, o) {
  12467.             if (o.value == EBGlobalConsts_CT2384137.NetworkError) {
  12468.                 TestAccountDialogCheck_CT2384137.ConnectionFailed();
  12469.             }
  12470.             else {
  12471.                 TestAccountDialogCheck_CT2384137.ConnectionSuccess(oTestDialogDocument);
  12472.             }
  12473.         };
  12474.  
  12475.         EBWeb_CT2384137.HTTPServerRequest(strCheckURL, null, false, oCallBackFunction);
  12476.     },
  12477.  
  12478.     StepTwoLoginToMailServer: function() {
  12479.         var objMailAccount = EBEMailNotifierManager_CT2384137.GetAccountObjectByType(this.EMailAccountType,
  12480.                                                                             this.EMail,
  12481.                                                                             this.Password,
  12482.                                                                             this.Pop3ServerURL,
  12483.                                                                             this.Pop3Port);
  12484.  
  12485.         var objResponseFunction = function(iNewMessages) {
  12486.             TestAccountDialogCheck_CT2384137.ResponseLoginMailServer(iNewMessages);
  12487.         };
  12488.  
  12489.         objMailAccount.GetNewMessagesCount(objResponseFunction, true);
  12490.     },
  12491.  
  12492.     ConnectionSuccess: function(oTestDialogDocument) {
  12493.         //check if the user close the window in the middle of the check
  12494.         if (!this.IsTestAccountDialogExists()) return;
  12495.  
  12496.         //set the check connection tree cell to success
  12497.         this.SetTreeCellIndicatorSuccess('tcEstablishConnection');
  12498.  
  12499.         //make time effect for the check function
  12500.         var objIntervalFunction = function() {
  12501.             //TestAccountDialogCheck_CT2384137.SetTreeCellIndicatorSuccess('tcFindMailServer');    
  12502.             TestAccountDialogCheck_CT2384137.StepTwoLoginToMailServer();
  12503.         };
  12504.  
  12505.         setTimeout(objIntervalFunction, 500);
  12506.     },
  12507.  
  12508.     ResponseLoginMailServer: function(iNewMessages) {
  12509.         //check if the user close the window in the middle of the check
  12510.         //Fix it later, enable the check
  12511.         //if(!BEMailNotifierDialogsManager_CT2384137.IsTestAccountDialogExists())return;
  12512.  
  12513.         if (iNewMessages == EBEmailAccountsConsts_CT2384137.LOGIN_FAILED) {
  12514.             this.SetTreeCellIndicatorFailed('tcLoginMsg');
  12515.             this.TestFailed();
  12516.         }
  12517.         else if (iNewMessages == EBEmailAccountsConsts_CT2384137.LOGIN_ANOTHER_ACCOUNT)
  12518.             this.TestWarning();
  12519.         else {
  12520.             this.SetTreeCellIndicatorSuccess('tcLoginMsg');
  12521.             this.TestSuccess();
  12522.         }
  12523.     },
  12524.  
  12525.     ConnectionFailed: function() {
  12526.         //check if the user close the window in the middle of the check
  12527.         if (!this.IsTestAccountDialogExists()) return;
  12528.  
  12529.  
  12530.         this.SetTreeCellIndicatorFailed('tcEstablishConnection');
  12531.         this.SetTreeCellIndicatorFailed('tcFindMailServer');
  12532.         this.SetTreeCellIndicatorFailed('tcLoginMsg');
  12533.         this.TestFailed();
  12534.     },
  12535.  
  12536.     SetTreeCellIndicatorSuccess: function(strTreeCellID) {
  12537.         var objTreeCellIndicator = this.TestDialogDocument.getElementById(strTreeCellID);
  12538.         var objTreeCellValue = this.TestDialogDocument.getElementById(strTreeCellID + 'Value');
  12539.  
  12540.         objTreeCellIndicator.setAttribute('src', EBEMailNotifierConsts_CT2384137.Images.V_Image);
  12541.  
  12542.         objTreeCellValue.setAttribute('label', EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksSuccess);
  12543.  
  12544.         return objTreeCellIndicator;
  12545.     },
  12546.  
  12547.     SetTreeCellIndicatorFailed: function(strTreeCellID) {
  12548.         var objTreeCellIndicator = this.TestDialogDocument.getElementById(strTreeCellID);
  12549.         var objTreeCellValue = this.TestDialogDocument.getElementById(strTreeCellID + 'Value');
  12550.  
  12551.         objTreeCellIndicator.setAttribute('src', EBEMailNotifierConsts_CT2384137.Images.X_Image);
  12552.  
  12553.         objTreeCellValue.setAttribute('label', EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksFailure);
  12554.  
  12555.         return objTreeCellIndicator;
  12556.     },
  12557.  
  12558.     TestSuccess: function() {
  12559.         var objTreeCellFinish = this.SetTreeCellIndicatorSuccess('tcFinishMsg');
  12560.         objTreeCellFinish.setAttribute('label', ' ' + EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksSuccessFinishMsg);
  12561.  
  12562.         var objTreeCellFinishDone = this.TestDialogDocument.getElementById('tcFinishMsgDone');
  12563.         objTreeCellFinishDone.setAttribute('properties', 'success');
  12564.         objTreeCellFinishDone.setAttribute('label', EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TaskSuccessDone);
  12565.         objTreeCellFinishDone.setAttribute('src', EBEMailNotifierConsts_CT2384137.Images.V_Image);
  12566.  
  12567.         this.Finish();
  12568.     },
  12569.  
  12570.     TestFailed: function() {
  12571.         var objTreeCellFinish = this.SetTreeCellIndicatorFailed('tcFinishMsg');
  12572.         objTreeCellFinish.setAttribute('label', ' ' + EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksFailureFinishMsg);
  12573.         objTreeCellFinish.setAttribute('properties', 'failed');
  12574.  
  12575.         this.Finish();
  12576.     },
  12577.  
  12578.     TestWarning: function() {
  12579.         var objTreeCellEstablish = this.TestDialogDocument.getElementById('tcEstablishConnection');
  12580.         var objTreeCellEstablishValue = this.TestDialogDocument.getElementById('tcEstablishConnectionValue');
  12581.         var objTreeCellLogin = this.TestDialogDocument.getElementById('tcLoginMsg');
  12582.         var objTreeCellLoginValue = this.TestDialogDocument.getElementById('tcLoginMsgValue');
  12583.  
  12584.         //the string of the warning message devide into 2 strings because
  12585.         //of spacing problem
  12586.         //convert the warning string according to the account type
  12587.         var strWarning1 = EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TestWarningMsg1;
  12588.         var strAccountName = EBEMailNotifierManager_CT2384137.GetAccountNameByType(this.EMailAccountType);
  12589.         strWarning1 = strWarning1.replace(EBEMailNotifierDialogsConsts_CT2384137.TestAccountDialog.AccountNameAlias, strAccountName);
  12590.  
  12591.         this.TestDialogDocument.getElementById('treeChildren').style.display = "none";
  12592.         this.TestDialogDocument.getElementById('txtWarning').innerHTML = strWarning1;
  12593.         this.TestDialogDocument.getElementById('errorLogoutDiv').style.display = "";
  12594.         this.TestDialogDocument.getElementById('imgWarning').setAttribute('src', EBEMailNotifierConsts_CT2384137.Images.WarningImage);
  12595.  
  12596.         this.Finish();
  12597.  
  12598.     },
  12599.  
  12600.     Finish: function() {
  12601.         var objButtonOKCancel = this.TestDialogDocument.getElementById('btnOKCancel');
  12602.         objButtonOKCancel.setAttribute('label', EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.ButtonOK);
  12603.     },
  12604.  
  12605.     NullifyMemebers: function() {
  12606.         this.EMailAccountType = null;
  12607.         this.EMail = '';
  12608.         this.Password = '';
  12609.         this.TestDialogDocument = null;
  12610.         this.AddEditDialogDocument = null;
  12611.     }
  12612. };
  12613.  
  12614. var EmailNotifierLanguagePack_CT2384137 =
  12615. {
  12616.     SettingsDialog: function() {
  12617.         var ID = 'EBEmailNotifierXULSettingsDialogID';
  12618.         var acceptButton = document.getElementById(ID).getButton('accept');
  12619.         var cancelButton = document.getElementById(ID).getButton('cancel');
  12620.         var emailNotifierSettings = document.getElementById('emailNotifierSettings');
  12621.         var getAlertsOfNewEmails = document.getElementById('getAlertsOfNewEmails');
  12622.         var emailNotifierChecksTheseAccounts = document.getElementById('emailNotifierChecksTheseAccounts');
  12623.         var tcAccountName = document.getElementById('tcAccountName');
  12624.         var tcAccountAddress = document.getElementById('tcAccountAddress');
  12625.         var tcAccountType = document.getElementById('tcAccountType');
  12626.         var tcAccountAutoLogin = document.getElementById('tcAccountAutoLogin');
  12627.         var checkForNewEmailsEvery = document.getElementById('checkForNewEmailsEvery');
  12628.         var checkPlaySound = document.getElementById('checkPlaySound');
  12629.         var radSoundUseDefault = document.getElementById('radSoundUseDefault');
  12630.         var radSoundChoose = document.getElementById('radSoundChoose');
  12631.         var btnSoundChooseFile = document.getElementById('btnSoundChooseFile');
  12632.         var btnSoundPlay = document.getElementById('btnSoundPlay');
  12633.         var aSupportLink = document.getElementById('aSupportLink');
  12634.         var btnToolbarOptions = document.getElementById('btnToolbarOptions');
  12635.         var btnAdd = document.getElementById('btnAdd');
  12636.         var btnEdit = document.getElementById('btnEdit');
  12637.         var btnDelete = document.getElementById('btnDelete');
  12638.  
  12639.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  12640.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  12641.  
  12642.         EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.Yes = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_YES');
  12643.         EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.No = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_NO');
  12644.  
  12645.         acceptButton.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK');
  12646.         cancelButton.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL');
  12647.         window.title = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_TITLE');
  12648.         emailNotifierSettings.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_INNER_TITLE');
  12649.         getAlertsOfNewEmails.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_INNER_DESCRIPTION');
  12650.         emailNotifierChecksTheseAccounts.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_LIST_TITLE');
  12651.         tcAccountName.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_LIST_CUL_NAME'));
  12652.         tcAccountAddress.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_LIST_CUL_ADDRESS'));
  12653.         tcAccountType.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_LIST_CUL_TYPE'));
  12654.         tcAccountAutoLogin.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_LIST_CUL_AUTOLOGIN'));
  12655.         checkForNewEmailsEvery.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_CHECK_EVERY_TEXT');
  12656.         checkPlaySound.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_PLAY_SOUND_TEXT');
  12657.         checkPlaySound.setAttribute('accesskey', radSoundUseDefault.getAttribute('label').charAt(0));
  12658.         radSoundUseDefault.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_DEFAULT_SOUND_TEXT');
  12659.         radSoundUseDefault.setAttribute('accesskey', radSoundUseDefault.getAttribute('label').charAt(0));
  12660.         radSoundChoose.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_DIFFERENT_SOUND_TEXT');
  12661.         radSoundChoose.setAttribute('accesskey', radSoundChoose.getAttribute('label').charAt(0));
  12662.         btnSoundChooseFile.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_BROWSE');
  12663.         btnSoundChooseFile.setAttribute('accesskey', btnSoundChooseFile.getAttribute('label').charAt(0));
  12664.         btnSoundPlay.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_BUTT_PLAY_TEXT');
  12665.         btnSoundPlay.setAttribute('accesskey', btnSoundPlay.getAttribute('label').charAt(0));
  12666.         aSupportLink.innerHTML = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_HELP');
  12667.         btnToolbarOptions.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_BUTT_TBOPTIONS_TEXT');
  12668.         btnToolbarOptions.setAttribute('accesskey', btnToolbarOptions.getAttribute('label').charAt(0));
  12669.         btnAdd.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_BUTT_ADD_TEXT'));
  12670.         btnAdd.setAttribute('accesskey', btnAdd.getAttribute('label').charAt(0));
  12671.         btnEdit.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_BUTT_EDIT_TEXT');
  12672.         btnEdit.setAttribute('accesskey', btnEdit.getAttribute('label').charAt(0));
  12673.         btnDelete.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_SETTINGS_DLG_BUTT_DELETE_TEXT');
  12674.         btnDelete.setAttribute('accesskey', btnDelete.getAttribute('label').charAt(0));
  12675.     },
  12676.  
  12677.     TestAccountDialogSub: function() {
  12678.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  12679.  
  12680.         EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksFailureFinishMsg = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_FAILED_TESTING');
  12681.         EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksSuccessFinishMsg = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_COMPLETED_SUCC_TEXT');
  12682.         EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TaskSuccessDone = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_DONE_TESTING');
  12683.         EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksSuccess = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_COMPLETED');
  12684.         EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TasksFailure = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_FAILED');
  12685.         EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.ButtonOK = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK');
  12686.         EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TestWarningMsg1 = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_PLEASE_LOGOUT_TEXT');
  12687.         // * EBEMailNotifierDialogsCaption_CT2384137.TestAccountDialog.TestWarningMsg2 = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_FAILED_TESTING');
  12688.     },
  12689.  
  12690.     TestAccountDialog: function() {
  12691.         var ID = 'EBEmailNotifierXULTestAccountDialogID';
  12692.  
  12693.         var acceptButton = document.getElementById(ID).getButton('accept');
  12694.         var EmailAccountTest = document.getElementById('EmailAccountTest');
  12695.         var tcEstablishConnection = document.getElementById('tcEstablishConnection');
  12696.         var tcLoginMsg = document.getElementById('tcLoginMsg');
  12697.         var tcFinishMsg = document.getElementById('tcFinishMsg');
  12698.         var tcTasks = document.getElementById('tcTasks');
  12699.         var tcStatus = document.getElementById('tcStatus');
  12700.  
  12701.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  12702.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  12703.  
  12704.         window.title = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_TITLE');
  12705.         acceptButton.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL');
  12706.         EmailAccountTest.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_INNER_TITLE');
  12707.         tcEstablishConnection.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_ESTABLISH'));
  12708.         tcLoginMsg.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_LOGINTO'));
  12709.         tcFinishMsg.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL'));
  12710.         tcTasks.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_CUL_TASKS'));
  12711.         tcStatus.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_CUL_STATUS'));
  12712.  
  12713.     },
  12714.  
  12715.     ConfirmDialog: function() {
  12716.         var ID = 'EBEmailNotifierXULConfirmAccountDialogID';
  12717.  
  12718.         var acceptButton = document.getElementById(ID).getButton('accept');
  12719.         var cancelButton = document.getElementById(ID).getButton('cancel');
  12720.         var Description = document.getElementById('Description');
  12721.         var Password = document.getElementById('Password');
  12722.  
  12723.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  12724.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  12725.  
  12726.         EBEMailNotifierDialogsConsts_CT2384137.ConfirmDialog.MismatchErrorTitle = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ALERT_MSG_WRONG_PASSWORD_TITLE');
  12727.         EBEMailNotifierDialogsConsts_CT2384137.ConfirmDialog.MismatchErrorContent = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ALERT_MSG_WRONG_PASSWORD');
  12728.  
  12729.         window.title = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_PASSWORD_DLG_TITLE');
  12730.         acceptButton.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK');
  12731.         cancelButton.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL');
  12732.         Description.setAttribute('innerHTML', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_PASSWORD_DLG_DESC'));
  12733.         Password.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_PASSWORD_DLG_PASSWORD');
  12734.     },
  12735.  
  12736.     AddEditDialog: function() {
  12737.         var ID = 'EBEmailNotifierXULAddEditDialogID';
  12738.  
  12739.         var acceptButton = document.getElementById(ID).getButton('accept');
  12740.         var cancelButton = document.getElementById(ID).getButton('cancel');
  12741.         var EmailAccountDetails = document.getElementById('EmailAccountDetails');
  12742.         var AccountType = document.getElementById('AccountType');
  12743.         var SupportedDomains = document.getElementById('SupportedDomains');
  12744.         var lblEMail = document.getElementById('lblEMail');
  12745.         var Password = document.getElementById('Password');
  12746.         var NameYourAccount = document.getElementById('NameYourAccount');
  12747.         var IncomingMailServer = document.getElementById('IncomingMailServer');
  12748.         var Port = document.getElementById('Port');
  12749.         var btnTestAccount = document.getElementById('btnTestAccount');
  12750.  
  12751.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  12752.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  12753.         EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.Yes = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_YES');
  12754.         EBEMailNotifierDialogsCaption_CT2384137.SettingsDialog.No = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_NO');
  12755.  
  12756.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.AutoLogin = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_AUTO_LOGIN_TEXT');
  12757.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.Pop3AutoLogin = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_OPEN_DEFAULT_CLIENT_TEXT');
  12758.         // * EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorTitleAlertMsg = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_TITLE');
  12759.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgIncorrectEMailAddress = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ALERT_MESSAGE_INCCORECT_ADDRESS');
  12760.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgEmailAlreadyExist = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ALERT_MESSAGE_ACCOUNT_ALREADY_EXISTS');
  12761.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgPOP3AlreadyExist = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ALERT_MESSAGE_ACCOUNT_ALREADY_EXISTS');
  12762.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgEmailAddressNotSupported = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ALERT_MESSAGE_EMAIL_NOT_SUPPORTED');
  12763.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.ErrorMsgEmailTypeIncorrect = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ALERT_MESSAGE_INCCORECT_ADDRESS');
  12764.  
  12765.         acceptButton.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK');
  12766.         cancelButton.label = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL');
  12767.         window.title = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_TITLE');
  12768.         EmailAccountDetails.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_INNER_TITLE');
  12769.         AccountType.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_TYPE_TEXT');
  12770.         SupportedDomains.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_SUPPORTED_DOMAINS_TEXT');
  12771.  
  12772.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.EmailAddress = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_EMAIL_ADDRESS_TEXT');
  12773.         EBEMailNotifierDialogsCaption_CT2384137.AddEditDialog.Pop3EMailAddress = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_USER_NAME_TEXT');
  12774.         Password.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_PASSWORD_TEXT');
  12775.         NameYourAccount.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_NAME_ACCOUNT_TEXT');
  12776.         IncomingMailServer.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_INCOMMING_SERVER_TEXT');
  12777.         Port.value = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_PORT_TEXT');
  12778.         btnTestAccount.setAttribute('label', objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_EMAIL_NOTIFIER_ADD_DLG_BUTT_TEST_MAIL_TEXT'));
  12779.         btnTestAccount.setAttribute('accesskey', btnTestAccount.getAttribute('label').charAt(0));
  12780.     }
  12781. };
  12782. var EBEMailNotifierConsts_CT2384137 =
  12783. {
  12784.     EMailNotifierDirectory: 'emailnotifier',
  12785.  
  12786.     EMailNotifierAccountsFileName: 'acc',
  12787.  
  12788.     EncryptionPass: 'EBEMailNotifierAcc',
  12789.  
  12790.     DefaultIntervalMinutes: 5,
  12791.  
  12792.     Images:
  12793.     {
  12794.         V_Image: 'chrome://iobitcom/skin/v.png',
  12795.         X_Image: 'chrome://iobitcom/skin/x.png',
  12796.         BlankImage: 'chrome://iobitcom/skin/blank.png',
  12797.         EMailImage: 'chrome://iobitcom/skin/email.png',
  12798.         EMailNewImage: 'chrome://iobitcom/skin/emailnew.png',
  12799.         EMailNewSmallImage: 'chrome://iobitcom/skin/emailnewsmall.png',
  12800.         StarImage: 'chrome://iobitcom/skin/star.png',
  12801.         WarningImage: 'chrome://iobitcom/skin/warning.png'
  12802.     },
  12803.  
  12804.     XML:
  12805.     {
  12806.         ACCOUNTS: 'ACCOUNTS',
  12807.         ACCOUNT: 'ACCOUNT',
  12808.         NAME: 'NAME',
  12809.         EMAIL: 'EMAIL',
  12810.         PASSWORD: 'PASSWORD',
  12811.         SERVER: 'SERVER',
  12812.         PORT: 'PORT',
  12813.         TYPE: 'TYPE',
  12814.         AUTO_LOGIN: 'AUTO_LOGIN',
  12815.         STARED: 'STARED',
  12816.         NEW_MESSAGES: 'NEW_MESSAGES'
  12817.     },
  12818.  
  12819.     Attributes:
  12820.     {
  12821.         MAIL_ACCOUNT: 'EB_ATTRIBUTE_MAIL_ACCOUNT',
  12822.         MAIL_ACCOUNT_VALUE: 'EB_ATTRIBUTE_MAIL_ACCOUNT_VALUE',
  12823.         CHECK_NEW_EMAIL_INTERVAL: 'EB_ATTRIBUTE_CHECK_NEW_EMAIL_INTERVAL',
  12824.         SOUND: 'EB_ATTRIBUTE_SOUND',
  12825.         STARED_ICON_URL: 'EB_ATTRIBUTE_STARED_ICON_URL',
  12826.         STARED_TOOLTIP: 'EB_ATTRIBUTE_STARED_TOOLTIP',
  12827.         DEFAULT_TOOLTIP: 'EB_ATTRIBUTE_DEFAULT_TOOLTIP',
  12828.         DEFAULT_CAPTION: 'EB_ATTRIBUTE_DEFAULT_CAPTION',
  12829.         EMAIL: 'EB_ATTRIBUTE_EMAIL',
  12830.         PASSWORD: 'EB_ATTRIBUTE_PASSWORD',
  12831.         ACCOUNT_TYPE: 'EB_ATTRIBUTE_ACCOUNT_TYPE',
  12832.         AUTO_LOGIN: 'EB_ATTRIBUTE_AUTO_LOGIN',
  12833.         POP3_SERVER: 'EB_ATTRIBUTE_POP3_SERVER',
  12834.         POP3_PORT: 'EB_ATTRIBUTE_POP3_PORT',
  12835.         TOTAL_NEW_MESSAGES: 'EB_ATTRIBUTE_TOTAL_NEW_MESSAGES'
  12836.     },
  12837.  
  12838.     Sound:
  12839.     {
  12840.         DefaultWavChromePath: 'chrome://iobitcom/skin/enSound.wav',
  12841.  
  12842.         NONE: 'NONE',
  12843.         DEFAULT: 'DEFAULT'
  12844.     }
  12845.  
  12846. }
  12847.  
  12848. var EBEMailNotifierManager_CT2384137 =
  12849. {
  12850.     Reset: function() {
  12851.         EBEMailNotifierConsts_CT2384137.Images.EMailImage = 'chrome://iobitcom/skin/email.png';
  12852.     },
  12853.  
  12854.     GetAccountObjectByType: function(iAccountType, strEMail, strPassword, strPop3ServerURL, iPop3Port) {
  12855.         var objMailAccount = null;
  12856.  
  12857.         if (iAccountType == EBEmailAccountsTypes_CT2384137.GMail) {
  12858.             objMailAccount = new EBGmailAccount_CT2384137(strEMail, strPassword);
  12859.         }
  12860.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Yahoo) {
  12861.             objMailAccount = new EBYahooAccount_CT2384137(strEMail, strPassword);
  12862.         }
  12863.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Hotmail) {
  12864.             objMailAccount = new EBHotmailAccount_CT2384137(strEMail, strPassword);
  12865.         }
  12866.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.RR) {
  12867.             objMailAccount = new EBRRAccount_CT2384137(strEMail, strPassword);
  12868.         }
  12869.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.AOL) {
  12870.             objMailAccount = new EBAOLAccount_CT2384137(strEMail, strPassword);
  12871.         }
  12872.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Univision) {
  12873.             objMailAccount = new EBUnivisionAccount_CT2384137(strEMail, strPassword);
  12874.         }
  12875.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Pop3) {
  12876.             objMailAccount = new EBPop3Account_CT2384137(strEMail,
  12877.                                                 strPassword,
  12878.                                                 strPop3ServerURL,
  12879.                                                 iPop3Port);
  12880.         }
  12881.  
  12882.         return objMailAccount;
  12883.     },
  12884.  
  12885.     GetAccountNameByType: function(iAccountType) {
  12886.         var strAccountName = '';
  12887.         if (iAccountType == EBEmailAccountsTypes_CT2384137.GMail) {
  12888.             strAccountName = EBEmailAccountsConsts_CT2384137.GMail.AccountName;
  12889.         }
  12890.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Yahoo) {
  12891.             strAccountName = EBEmailAccountsConsts_CT2384137.Yahoo.AccountName;
  12892.         }
  12893.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Hotmail) {
  12894.             strAccountName = EBEmailAccountsConsts_CT2384137.Hotmail.AccountName;
  12895.         }
  12896.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.RR) {
  12897.             strAccountName = EBEmailAccountsConsts_CT2384137.RR.AccountName;
  12898.         }
  12899.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.AOL) {
  12900.             strAccountName = EBEmailAccountsConsts_CT2384137.AOL.AccountName;
  12901.         }
  12902.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Univision) {
  12903.             strAccountName = EBEmailAccountsConsts_CT2384137.Univision.AccountName;
  12904.         }
  12905.         else if (iAccountType == EBEmailAccountsTypes_CT2384137.Pop3) {
  12906.             strAccountName = EBEmailAccountsConsts_CT2384137.Pop3.AccountName;
  12907.         }
  12908.  
  12909.         return strAccountName;
  12910.     },
  12911.  
  12912.     GetAccountTypeByEMail: function(strEMail) {
  12913.         var iAccountType = 0;
  12914.         if (this.IsSupportedEMailGMail(strEMail)) {
  12915.             iAccountType = EBEmailAccountsTypes_CT2384137.GMail;
  12916.         }
  12917.         else if (this.IsSupportedEMailYahoo(strEMail)) {
  12918.             iAccountType = EBEmailAccountsTypes_CT2384137.Yahoo;
  12919.         }
  12920.         else if (this.IsSupportedEMailHotmail(strEMail)) {
  12921.             iAccountType = EBEmailAccountsTypes_CT2384137.Hotmail;
  12922.         }
  12923.         else if (this.IsSupportedEMailRR(strEMail)) {
  12924.             iAccountType = EBEmailAccountsTypes_CT2384137.RR;
  12925.         }
  12926.         else if (this.IsSupportedEMailAOL(strEMail)) {
  12927.             iAccountType = EBEmailAccountsTypes_CT2384137.AOL;
  12928.         }
  12929.         else if (this.IsSupportedEMailUnivision(strEMail)) {
  12930.             iAccountType = EBEmailAccountsTypes_CT2384137.Univision;
  12931.         }
  12932.  
  12933.         return iAccountType;
  12934.     },
  12935.  
  12936.  
  12937.     GetUserNameByEMail: function(strFullEMail) {
  12938.         var strUserName = strFullEMail;
  12939.         var iIndexOfAT = strFullEMail.indexOf('@');
  12940.         if (iIndexOfAT != -1) {
  12941.             strUserName = strFullEMail.substring(0, iIndexOfAT);
  12942.         }
  12943.  
  12944.         return strUserName;
  12945.     },
  12946.  
  12947.     IsEMailDomain: function(AccountConstClass, strEMail) {
  12948.         var arrDomains = AccountConstClass.EMailDomain;
  12949.         for (var i = 0; i < arrDomains.length; i++) {
  12950.             if (strEMail.toLowerCase().indexOf(arrDomains[i]) != -1)
  12951.                 return true;
  12952.         }
  12953.  
  12954.         return false;
  12955.     },
  12956.  
  12957.     IsRRDomain: function(strEMail) {
  12958.         if (!strEMail || strEMail.indexOf("@") == -1) return false;
  12959.  
  12960.         var arr = strEMail.split("@");
  12961.         var domain = arr[1];
  12962.         var topLevelDomain = EBUrl_CT2384137.GetTopLevelDomainName(domain, true);
  12963.         return (topLevelDomain.toLowerCase() == "rr.com" || topLevelDomain.toLowerCase() == "roadrunner.com");
  12964.     },
  12965.  
  12966.     IsSupportedEMail: function(strEMail, arrDomains) {
  12967.         var isSupported = false;
  12968.         for (var i = 0; i < arrDomains.length; i++) {
  12969.             isSupported = EBGlobalManager_CT2384137.EndsWith(strEMail, arrDomains[i]);
  12970.             if (isSupported) break;
  12971.         }
  12972.         return isSupported;
  12973.     },
  12974.  
  12975.     IsSupportedEMailGMail: function(strEMail) {
  12976.         var arrDomains = EBEmailAccountsConsts_CT2384137.GMail.EMailDomain;
  12977.         return this.IsSupportedEMail(strEMail, arrDomains);
  12978.     },
  12979.  
  12980.     IsSupportedEMailYahoo: function(strEMail) {
  12981.         var arrDomains = EBEmailAccountsConsts_CT2384137.Yahoo.EMailDomain;
  12982.         return this.IsSupportedEMail(strEMail, arrDomains);
  12983.     },
  12984.  
  12985.     IsSupportedEMailHotmail: function(strEMail) {
  12986.         var arrDomains = EBEmailAccountsConsts_CT2384137.Hotmail.EMailDomain;
  12987.         return this.IsSupportedEMail(strEMail, arrDomains);
  12988.     },
  12989.  
  12990.     IsSupportedEMailAOL: function(strEMail) {
  12991.         var arrDomains = EBEmailAccountsConsts_CT2384137.AOL.EMailDomain;
  12992.         return this.IsSupportedEMail(strEMail, arrDomains);
  12993.     },
  12994.  
  12995.     IsSupportedEMailRR: function(strEMail) {
  12996.         return this.IsRRDomain(strEMail);
  12997.     },
  12998.  
  12999.     IsSupportedEMailUnivision: function(strEMail) {
  13000.         var arrDomains = EBEmailAccountsConsts_CT2384137.Univision.EMailDomain;
  13001.         return this.IsSupportedEMail(strEMail, arrDomains);
  13002.     },
  13003.  
  13004.     IsSupportedEMailAccounts: function(strEMail) {
  13005.         return this.IsSupportedEMailGMail(strEMail)
  13006.                 ||
  13007.                 this.IsSupportedEMailYahoo(strEMail)
  13008.                 ||
  13009.                 this.IsSupportedEMailHotmail(strEMail)
  13010.                 ||
  13011.                 this.IsSupportedEMailRR(strEMail)
  13012.                 ||
  13013.                 this.IsSupportedEMailAOL(strEMail)
  13014.                 ||
  13015.                 this.IsSupportedEMailUnivision(strEMail);
  13016.     },
  13017.  
  13018.     GetEMailDomainCaption: function(arrCaptionDomains) {
  13019.         var strDelimiter = EBEmailAccountsConsts_CT2384137.DomainCaptionDelimiter;
  13020.         var strDomainCaptions = '';
  13021.         for (var i = 0; i < arrCaptionDomains.length; i++) {
  13022.             if ((i + 1) == arrCaptionDomains.length) {
  13023.                 strDelimiter = '';
  13024.             }
  13025.             strDomainCaptions += arrCaptionDomains[i] + strDelimiter;
  13026.         }
  13027.  
  13028.         return strDomainCaptions;
  13029.     },
  13030.  
  13031.     GetGMailDomainCaption: function() {
  13032.         var arrCaptionDomains = EBEmailAccountsConsts_CT2384137.GMail.EMailDomainCaption;
  13033.         return this.GetEMailDomainCaption(arrCaptionDomains);
  13034.     },
  13035.  
  13036.     GetYahooDomainCaption: function(strEMail) {
  13037.         var arrCaptionDomains = EBEmailAccountsConsts_CT2384137.Yahoo.EMailDomainCaption;
  13038.         return this.GetEMailDomainCaption(arrCaptionDomains);
  13039.     },
  13040.  
  13041.     GetHotmailDomainCaption: function(strEMail) {
  13042.         var arrCaptionDomains = EBEmailAccountsConsts_CT2384137.Hotmail.EMailDomainCaption;
  13043.         return this.GetEMailDomainCaption(arrCaptionDomains);
  13044.     },
  13045.  
  13046.     GetRRDomainCaption: function(strEMail) {
  13047.         var arrCaptionDomains = EBEmailAccountsConsts_CT2384137.RR.EMailDomainCaption;
  13048.         return this.GetEMailDomainCaption(arrCaptionDomains);
  13049.     },
  13050.     
  13051.      GetAOLDomainCaption: function(strEMail) {
  13052.         var arrCaptionDomains = EBEmailAccountsConsts_CT2384137.AOL.EMailDomainCaption;
  13053.         return this.GetEMailDomainCaption(arrCaptionDomains);
  13054.     },
  13055.  
  13056.     GetUnivisionDomainCaption: function(strEMail) {
  13057.         var arrCaptionDomains = EBEmailAccountsConsts_CT2384137.Univision.EMailDomainCaption;
  13058.         return this.GetEMailDomainCaption(arrCaptionDomains);
  13059.     }
  13060. };
  13061.  
  13062. //the object that the dialogs is used to handle the numbers of emails accoutns
  13063. //that the user defined. the file of the emails is writing from this object.
  13064. //and the loading of the menu item to the toolbar component email notifier is using 
  13065. //the file to read all that accounts
  13066. function EBEMailAccountDataObject_CT2384137(strAccountName,
  13067.                                 strEMailAddress,
  13068.                                 strPassword,
  13069.                                 iAccountType,
  13070.                                 isAutoLogin,
  13071.                                 isStared,
  13072.                                 iNewMessages,
  13073.                                 strPop3Server,
  13074.                                 iPop3Port) {
  13075.     this.AccountName = strAccountName;
  13076.     this.EMailAddress = strEMailAddress;
  13077.     this.Password = strPassword;
  13078.     this.AccountType = iAccountType;
  13079.     this.AutoLogin = isAutoLogin;
  13080.  
  13081.     this.Stared = false;
  13082.     this.NewMessages = 0;
  13083.     this.Pop3Server = '';
  13084.     this.Pop3Port = 0;
  13085.  
  13086.     if (isStared) {
  13087.         this.Stared = isStared;
  13088.     }
  13089.     if (iNewMessages) {
  13090.         this.NewMessages = iNewMessages;
  13091.     }
  13092.     if (strPop3Server) {
  13093.         this.Pop3Server = strPop3Server;
  13094.     }
  13095.     if (iPop3Port) {
  13096.         this.Pop3Port = iPop3Port;
  13097.     }
  13098. }
  13099.  
  13100. var EBEMailNotifierToolbarManager_CT2384137 =
  13101. {
  13102.     MailAccountsCollection: null,
  13103.  
  13104.     TimeoutID: null,
  13105.  
  13106.     //var to check if the button is stared on the onhidden popup
  13107.     //so just if it is stared i nullify the stars and write to the file
  13108.     ButtonStared: false,
  13109.  
  13110.     Sound: null,
  13111.  
  13112.     OnLoadToolbarEMailNotifier: function() {
  13113.         //set the mail collection from the file
  13114.         this.MailAccountsCollection = this.AccountsFileToAccountsCollection();
  13115.  
  13116.         //set the on hidden popup event (to clear the stars when it closed!)
  13117.         this.RemoveToolbarMailAccounts();
  13118.         this.BuildToolbarMailAccounts();
  13119.         this.CheckToolbarMenuItemsMailAccounts(false);
  13120.     },
  13121.  
  13122.     OnUnloadToolbarEMailNotifier: function() {
  13123.         var oEmailNotifierToolbarButton = EBComponentsManager_CT2384137.GetEMailNotifierToolbarButton();
  13124.         if (oEmailNotifierToolbarButton) {
  13125.             this.RemoveToolbarMailAccounts();
  13126.             this.ClearMailAccountsTimeoutID();
  13127.         }
  13128.     },
  13129.  
  13130.     OnCommandSettingsOKButton: function(oMailAccountsCollection) {
  13131.         this.RemoveToolbarMailAccounts();
  13132.  
  13133.         //get the accounts from the dialog accounts collection
  13134.         this.MailAccountsCollection = oMailAccountsCollection;
  13135.  
  13136.         //write the changes to the file
  13137.         this.AccountsCollectionToAccountsFile(this.MailAccountsCollection);
  13138.  
  13139.         //send the changes to the rest of the open browsers
  13140.         this.BroadcastChangesToAllBrowsers();
  13141.  
  13142.         this.BuildToolbarMailAccounts();
  13143.  
  13144.         this.CheckToolbarMenuItemsMailAccounts(true);
  13145.     },
  13146.  
  13147.     OnPopupHiddenMailAccounts: function(event) {
  13148.         //check if the button is already not stared so no need to nullify it!
  13149.         if (!this.ButtonStared) return;
  13150.  
  13151.         //clear all the stars 
  13152.         var arrAccounts = this.MailAccountsCollection.Arr;
  13153.         var i;
  13154.         for (i = 0; i < arrAccounts.length; i++)
  13155.             arrAccounts[i].Stared = false;
  13156.  
  13157.         //update the button and all the menu item
  13158.         //button image update
  13159.         this.SetToolbarButtonImageTooltip(false);
  13160.         //menu items image update
  13161.         var objMenuItemsMailAccounts = this.GetMenuItemsMailAccounts();
  13162.         var objMenuItem = null;
  13163.         var strCurrentImage = '';
  13164.         for (i = 0; i < objMenuItemsMailAccounts.length; i++) {
  13165.             objMenuItem = objMenuItemsMailAccounts.item(i);
  13166.             strCurrentImage = objMenuItem.getAttribute('image');
  13167.             if (strCurrentImage == EBEMailNotifierConsts_CT2384137.Images.StarImage)
  13168.                 objMenuItem.setAttribute('image', EBEMailNotifierConsts_CT2384137.Images.BlankImage);
  13169.         }
  13170.  
  13171.         //write the file
  13172.         this.AccountsCollectionToAccountsFile(this.MailAccountsCollection);
  13173.         this.BroadcastChangesToAllBrowsers();
  13174.     },
  13175.  
  13176.     GetMenuItemsMailAccounts: function() {
  13177.         var objXULMenuPopup = this.GetXULToolbarMenuPopup();
  13178.  
  13179.         var objMenuItemsMailAccounts = objXULMenuPopup.getElementsByAttribute(EBEMailNotifierConsts_CT2384137.Attributes.MAIL_ACCOUNT, EBEMailNotifierConsts_CT2384137.Attributes.MAIL_ACCOUNT_VALUE);
  13180.  
  13181.         return objMenuItemsMailAccounts;
  13182.     },
  13183.  
  13184.     GetMenuItemAccountIndex: function(objMenuItemMailAccount) {
  13185.         var objMenuItemsMailAccounts = this.GetMenuItemsMailAccounts();
  13186.  
  13187.         for (var i = 0; i < objMenuItemsMailAccounts.length; i++) {
  13188.             if (objMenuItemsMailAccounts.item(i) == objMenuItemMailAccount) {
  13189.                 return i;
  13190.             }
  13191.         }
  13192.  
  13193.         return -1;
  13194.     },
  13195.  
  13196.     BuildToolbarMailAccounts: function() {
  13197.         var arrAccounts = this.MailAccountsCollection.Arr;
  13198.         var objAccountData;
  13199.  
  13200.         if (!arrAccounts || arrAccounts.length == 0) {
  13201.             //set the default caption of the button 
  13202.             this.SetToolbarButtonDefaulCaption();
  13203.             this.SetToolbarButtonImageTooltip(false);
  13204.  
  13205.             //remove the separator if there is no accounts
  13206.             this.ShowHideSeparatorCheckMenuItems(true);
  13207.         }
  13208.         else {
  13209.             //set button defalt caption with elements ([0 new])
  13210.             this.SetToolbarButtonCaption(0);
  13211.  
  13212.             this.SetToolbarButtonImageTooltip(this.IsButtonToStared());
  13213.  
  13214.             //add the separator and the check menu items
  13215.             this.ShowHideSeparatorCheckMenuItems(false);
  13216.  
  13217.             for (var i = 0; i < arrAccounts.length; i++) {
  13218.                 objAccountData = arrAccounts[i];
  13219.                 this.BuildToolbarMenuItemMailAccount(objAccountData);
  13220.             }
  13221.  
  13222.  
  13223.         }
  13224.     },
  13225.  
  13226.     //check if one of the accounts are stared to star 
  13227.     //the main button
  13228.     IsButtonToStared: function() {
  13229.         var arrAccounts = this.MailAccountsCollection.Arr;
  13230.         for (var i = 0; i < arrAccounts.length; i++) {
  13231.             if (arrAccounts[i].Stared) {
  13232.                 return true;
  13233.             }
  13234.         }
  13235.  
  13236.         return false;
  13237.     },
  13238.  
  13239.     BuildToolbarMenuItemMailAccount: function(objAccountData) {
  13240.         var objXULMenuPopup = this.GetXULToolbarMenuPopup();
  13241.  
  13242.         var strLabel = '';
  13243.         var strImage = '';
  13244.         var strAccelText = '';
  13245.         var objCommand = function(event) {
  13246.             EBEMailNotifierToolbarManager_CT2384137.OnCommandMenuItemMailAccount(event);
  13247.             event.cancelBubble = true;
  13248.         };
  13249.         var arrData = new Array();
  13250.  
  13251.         objAccountData.NewMessages = parseInt(objAccountData.NewMessages);
  13252.  
  13253.         strLabel = this.GetMailAccountFullCaption(objAccountData);
  13254.         strImage = this.GetMailAccountImage(objAccountData);
  13255.         strAccelText = this.GetMailAccountAccelText(objAccountData);
  13256.  
  13257.         //build the attributes 
  13258.         //special attribute to distinguish between mail account menu item and othe menu items(check,settings)
  13259.         arrData[EBEMailNotifierConsts_CT2384137.Attributes.MAIL_ACCOUNT] = EBEMailNotifierConsts_CT2384137.Attributes.MAIL_ACCOUNT_VALUE;
  13260.         arrData[EBEMailNotifierConsts_CT2384137.Attributes.EMAIL] = objAccountData.EMailAddress;
  13261.         arrData[EBEMailNotifierConsts_CT2384137.Attributes.PASSWORD] = objAccountData.Password;
  13262.         arrData[EBEMailNotifierConsts_CT2384137.Attributes.ACCOUNT_TYPE] = objAccountData.AccountType;
  13263.         arrData[EBEMailNotifierConsts_CT2384137.Attributes.AUTO_LOGIN] = objAccountData.AutoLogin;
  13264.         arrData[EBEMailNotifierConsts_CT2384137.Attributes.POP3_SERVER] = objAccountData.Pop3Server;
  13265.         arrData[EBEMailNotifierConsts_CT2384137.Attributes.POP3_PORT] = objAccountData.Pop3Port;
  13266.  
  13267.         var objXULMenuItem = EBXULFactory_CT2384137.CreateMenuItem(strLabel, strImage, objAccountData.EMailAddress, objCommand, "", arrData);
  13268.         objXULMenuItem.setAttribute("acceltext", strAccelText);
  13269.  
  13270.         var objXULSeparatorItem = this.GetXULToolbarSeparatorItem();
  13271.         objXULMenuPopup.insertBefore(objXULMenuItem, objXULSeparatorItem);
  13272.  
  13273.         //update the main button caption
  13274.         if (objAccountData.NewMessages != EBEmailAccountsConsts_CT2384137.LOGIN_FAILED)
  13275.             this.UpdateButtonNewMessages(objAccountData.NewMessages);
  13276.     },
  13277.  
  13278.     ClearMailAccountsTimeoutID: function() {
  13279.         if (this.TimeoutID)
  13280.             clearTimeout(this.TimeoutID);
  13281.  
  13282.         this.TimeoutID = null;
  13283.     },
  13284.  
  13285.     RemoveToolbarMailAccounts: function() {
  13286.         var objMenuItemsMailAccounts = this.GetMenuItemsMailAccounts();
  13287.         while (objMenuItemsMailAccounts.length > 0) {
  13288.             this.RemoveToolbarMailAccount(objMenuItemsMailAccounts.item(objMenuItemsMailAccounts.length - 1));
  13289.  
  13290.             //get the objMenuItemsMailAccounts due to a bug in Firefox 1.0.7
  13291.             //probably the getElementsByAttribute not related to the dom in 1.0.7
  13292.             objMenuItemsMailAccounts = this.GetMenuItemsMailAccounts();
  13293.         }
  13294.     },
  13295.  
  13296.     RemoveToolbarMailAccount: function(objMenuItemMailAccount) {
  13297.         //remove the menu item
  13298.         var objXULMenuPopup = this.GetXULToolbarMenuPopup();
  13299.         objXULMenuPopup.removeChild(objMenuItemMailAccount);
  13300.     },
  13301.  
  13302.     OnCommandCheckForNewEMailsButton: function() {
  13303.         //re-check all accounts
  13304.         this.CheckToolbarMenuItemsMailAccounts(true);
  13305.  
  13306.         //usage
  13307.         EBUsageEmailNotifier_CT2384137.OnCheckForNewEmails();
  13308.     },
  13309.  
  13310.     CheckToolbarMenuItemsMailAccounts: function(isForceCheck) {
  13311.         if (isForceCheck || this.IsPollDateElapsed()) {
  13312.             this.CheckMailAccountsFromServers();
  13313.         }
  13314.  
  13315.         //make the interval call
  13316.         this.SetTimeoutAccountsCheck();
  13317.     },
  13318.  
  13319.     //check if need to make a master check(check from server) or not(check from file)
  13320.     IsPollDateElapsed: function() {
  13321.         var strPollDate = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.EMailNotifierPollDate);
  13322.         if (strPollDate == null || strPollDate == "") {
  13323.             return true;
  13324.         }
  13325.  
  13326.         var objCurrentDate = new Date();
  13327.         var objPollDate = new Date(strPollDate);
  13328.  
  13329.         var iCheckIntervalTime = this.GetCheckAccountIntervalTime();
  13330.  
  13331.         var iDateDiff = objCurrentDate - objPollDate;
  13332.  
  13333.         return iDateDiff > iCheckIntervalTime;
  13334.     },
  13335.  
  13336.     SetPollDatePreference: function() {
  13337.         var objCurrentDate = new Date();
  13338.         var strDateValue = objCurrentDate.toString();
  13339.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.EMailNotifierPollDate, strDateValue);
  13340.     },
  13341.  
  13342.     //this call actually check the accounts using the account objects(using GetNewMessages function)
  13343.     //and the rest of the open browsers update themselves from the file each interval time
  13344.     CheckMailAccountsFromServers: function() {
  13345.         //set the time of the check
  13346.         this.SetPollDatePreference();
  13347.  
  13348.         this.SetCurrentSound();
  13349.  
  13350.         var objMenuItemsMailAccounts = this.GetMenuItemsMailAccounts();
  13351.         var objMenuItemMailAccount = null;
  13352.         var objAccountData = null;
  13353.  
  13354.         var iLastIndex = this.MailAccountsCollection.Arr.length - 1;
  13355.  
  13356.         //start the check from the last child(menu item mail account) and in the end of each check 
  13357.         //the current child call the prev child email check till the first and vice-verse
  13358.         objMenuItemMailAccount = objMenuItemsMailAccounts.item(iLastIndex);
  13359.         objAccountData = this.MailAccountsCollection.GetItem(iLastIndex);
  13360.  
  13361.         if (objMenuItemMailAccount && objAccountData) {
  13362.             var objIntervalFunction = function() {
  13363.                 EBEMailNotifierToolbarManager_CT2384137.CheckToolbarMenuItemMailAccount(objMenuItemMailAccount, objAccountData);
  13364.             }
  13365.             setTimeout(objIntervalFunction, 100);
  13366.         }
  13367.     },
  13368.  
  13369.     CheckToolbarMenuItemMailAccount: function(objXULMenuItem, objAccountData) {
  13370.         var strLoginEMail = objAccountData.EMailAddress;
  13371.         var strLoginPassword = objAccountData.Password;
  13372.         var strPop3MailServerURL = objAccountData.Pop3Server;
  13373.         var iPop3Port = objAccountData.Pop3Port;
  13374.  
  13375.         var objMailAccount = EBEMailNotifierManager_CT2384137.GetAccountObjectByType(objAccountData.AccountType,
  13376.                                                                             strLoginEMail,
  13377.                                                                             strLoginPassword,
  13378.                                                                             strPop3MailServerURL,
  13379.                                                                             iPop3Port);
  13380.  
  13381.         if (objMailAccount) {
  13382.             var objCallBackFunction = function(iNewMessages) {
  13383.                 EBEMailNotifierToolbarManager_CT2384137.CheckToolbarMenuItemMailAccountCallBack(objXULMenuItem, objAccountData, iNewMessages);
  13384.             };
  13385.  
  13386.             objMailAccount.GetNewMessagesCount(objCallBackFunction);
  13387.         }
  13388.     },
  13389.  
  13390.     IsMenuItemMailAccountChild: function(objMenuItemMailAccountChild) {
  13391.         var objMenuItemsMailAccounts = this.GetMenuItemsMailAccounts();
  13392.         for (var i = 0; i < objMenuItemsMailAccounts.length; i++) {
  13393.             if (objMenuItemsMailAccounts.item(i) == objMenuItemMailAccountChild) {
  13394.                 return true;
  13395.             }
  13396.         }
  13397.         return false;
  13398.     },
  13399.  
  13400.     CheckToolbarMenuItemMailAccountCallBack: function(objXULMenuItem, objAccountData, iNewMessages) {
  13401.         //check to see if the callback menuitem is still part of the 
  13402.         //email notifier dom elements - and if not terminate it
  13403.         //the check is perform due to too much reqeusts (the close dialogs,refresh toolbar)
  13404.         //so the timeouts can get out of mix - that is why i check it!
  13405.         if (!this.IsMenuItemMailAccountChild(objXULMenuItem)) {
  13406.             return;
  13407.         }
  13408.  
  13409.         //the changes coming back from the thread are only occur to the
  13410.         //data objects - the changes to the GUI (menu items) occur
  13411.         //in end of each cycle (and then broadcast to all browsers!
  13412.  
  13413.         iNewMessages = parseInt(iNewMessages);
  13414.         objAccountData.NewMessages = parseInt(objAccountData.NewMessages);
  13415.  
  13416.         var isStared = false;
  13417.  
  13418.         //flag determine if to perform new messages for this menuitem
  13419.  
  13420.         if (iNewMessages <= 0) {
  13421.             isStared = false;
  13422.         }
  13423.         else if (iNewMessages > objAccountData.NewMessages) {
  13424.             isStared = true;
  13425.  
  13426.         }
  13427.         else {
  13428.             //if this element was stared i don't change it
  13429.             if (objAccountData.Stared) {
  13430.                 isStared = true;
  13431.             }
  13432.         }
  13433.  
  13434.         //update the object data:
  13435.         var iOldMessages = objAccountData.NewMessages;
  13436.  
  13437.         //if there is another login the data new messages is stay put
  13438.         if (iNewMessages != EBEmailAccountsConsts_CT2384137.LOGIN_ANOTHER_ACCOUNT) {
  13439.             objAccountData.NewMessages = iNewMessages;
  13440.         }
  13441.         objAccountData.Stared = isStared;
  13442.  
  13443.  
  13444.         this.UpdateToolbarMenuItemMailAccount(objXULMenuItem, objAccountData, iOldMessages);
  13445.  
  13446.  
  13447.         //check the previous account in the list (the check is one by one!)
  13448.         this.CheckPreviousAccount(objXULMenuItem);
  13449.  
  13450.     },
  13451.  
  13452.     UpdateToolbarMenuItemMailAccount: function(objXULMenuItem, objAccountData, iOldMessages) {
  13453.         //set label and stared for this menu item:
  13454.         var isStared = objAccountData.Stared;
  13455.         var iNewMessages = objAccountData.NewMessages;
  13456.  
  13457.         var strLabel = this.GetMailAccountFullCaption(objAccountData);
  13458.         var strImage = this.GetMailAccountImage(objAccountData);
  13459.         var strAccelText = this.GetMailAccountAccelText(objAccountData);
  13460.  
  13461.  
  13462.         objXULMenuItem.setAttribute("label", strLabel);
  13463.         objXULMenuItem.setAttribute("image", strImage);
  13464.         EBUILogic_Functions_CT2384137.setAcceltext(objXULMenuItem, strAccelText);
  13465.  
  13466.         var isChanged = false;
  13467.  
  13468.         //update the button caption:
  13469.         if (iNewMessages != EBEmailAccountsConsts_CT2384137.LOGIN_ANOTHER_ACCOUNT) {
  13470.             if (iNewMessages != iOldMessages) {
  13471.                 isChanged = true;
  13472.                 //check if it's failed to set the message to zero (for the subtract from the main button the old messages)
  13473.                 if (iNewMessages == EBEmailAccountsConsts_CT2384137.LOGIN_FAILED) {
  13474.                     iNewMessages = 0;
  13475.                 }
  13476.                 else if (iOldMessages == EBEmailAccountsConsts_CT2384137.LOGIN_FAILED) {
  13477.                     iOldMessages = 0;
  13478.                 }
  13479.  
  13480.                 var iDiffMessages = iNewMessages - iOldMessages;
  13481.                 this.UpdateButtonNewMessages(iDiffMessages);
  13482.  
  13483.             }
  13484.         }
  13485.  
  13486.  
  13487.         if (isStared) {
  13488.             //update image and tooltip
  13489.             this.SetToolbarButtonImageTooltip(true);
  13490.  
  13491.             //play music only if it's stared (new email)
  13492.             //and it's not the state like before 
  13493.             //only when the user got new email the first time
  13494.             if (isChanged) {
  13495.                 //check if to play the sound
  13496.                 this.CheckNewEMailPlaySound();
  13497.             }
  13498.         }
  13499.  
  13500.         if (isChanged) {
  13501.             //write the changes to the accounts file:
  13502.             this.AccountsCollectionToAccountsFile(this.MailAccountsCollection);
  13503.             //broadcast to all elements
  13504.             this.BroadcastChangesToAllBrowsers();
  13505.         }
  13506.  
  13507.     },
  13508.  
  13509.     CheckPreviousAccount: function(objXULMenuItem) {
  13510.         var objMenuItemsMailAccounts = this.GetMenuItemsMailAccounts();
  13511.         var objMenuItemMailAccount = null;
  13512.         var objAccountData = null;
  13513.  
  13514.         var iIndex = this.GetMenuItemAccountIndex(objXULMenuItem);
  13515.         var iAccountsLength = this.MailAccountsCollection.Arr.length;
  13516.  
  13517.         var iPreviousIndex = iIndex - 1;
  13518.  
  13519.         if (iPreviousIndex >= 0) {
  13520.             objMenuItemMailAccount = objMenuItemsMailAccounts.item(iPreviousIndex);
  13521.             objAccountData = this.MailAccountsCollection.GetItem(iPreviousIndex);
  13522.  
  13523.             this.CheckToolbarMenuItemMailAccount(objMenuItemMailAccount, objAccountData);
  13524.         }
  13525.         else {
  13526.             //check if there is new message to update the button
  13527.             //if there is no new messages we also need to update the button to be
  13528.             //not stared in case it was stared before and now there is no msg and need
  13529.             //to be stared off
  13530.             var bIsToStared = this.IsThereIsNewMessages();
  13531.             this.SetToolbarButtonImageTooltip(bIsToStared);
  13532.  
  13533.         }
  13534.     },
  13535.  
  13536.     //check from all the accounts if there is one that there is new message
  13537.     IsThereIsNewMessages: function() {
  13538.         var oCollection = this.MailAccountsCollection;
  13539.         if (oCollection) {
  13540.             var arrAccounts = oCollection.Arr;
  13541.             var oAccount = null;
  13542.             for (var i = 0; i < arrAccounts.length; i++) {
  13543.                 oAccount = oCollection.GetItem(i);
  13544.                 if (oAccount.Stared) {
  13545.                     return true;
  13546.                 }
  13547.             }
  13548.         }
  13549.  
  13550.         return false;
  13551.     },
  13552.  
  13553.     //set the changes from the file to all open browsers
  13554.     BroadcastChangesToAllBrowsers: function() {
  13555.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  13556.                         .getService(Components.interfaces.nsIWindowMediator);
  13557.  
  13558.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  13559.         while (objEnumerator.hasMoreElements()) {
  13560.             var objWindow = objEnumerator.getNext();
  13561.             if (objWindow != window) {
  13562.                 if (objWindow.EBEMailNotifierToolbarManager_CT2384137.RebuildMailAccountsFromFile) {
  13563.                     //try-catch to avoid other browsers when they email notifier
  13564.                     //is hidden so the xul elements not loaded and it can cause an exception
  13565.                     try {
  13566.                         objWindow.EBEMailNotifierToolbarManager_CT2384137.RebuildMailAccountsFromFile();
  13567.                     }
  13568.                     catch (ex) { }
  13569.                 }
  13570.             }
  13571.         }
  13572.     },
  13573.  
  13574.     RebuildMailAccountsFromFile: function() {
  13575.         this.MailAccountsCollection = this.AccountsFileToAccountsCollection();
  13576.         this.RemoveToolbarMailAccounts();
  13577.         this.BuildToolbarMailAccounts();
  13578.     },
  13579.  
  13580.     SetTimeoutAccountsCheck: function() {
  13581.         var iIntervalTime = this.GetCheckAccountIntervalTime();
  13582.  
  13583.         var objIntervalFunction = function() {
  13584.             EBEMailNotifierToolbarManager_CT2384137.CheckToolbarMenuItemsMailAccounts(false);
  13585.         };
  13586.  
  13587.         this.ClearMailAccountsTimeoutID();
  13588.  
  13589.         this.TimeoutID = setTimeout(objIntervalFunction, iIntervalTime);
  13590.     },
  13591.  
  13592.     GetCheckAccountIntervalTime: function() {
  13593.         var iMinutes = EBEMailNotifierConsts_CT2384137.DefaultIntervalMinutes;
  13594.         //check from the prefs and if there isn't take the default from the button settings definition
  13595.         var oEmailNotifierToolbarButton = EBComponentsManager_CT2384137.GetEMailNotifierToolbarButton();
  13596.         if (oEmailNotifierToolbarButton) {
  13597.             iMinutes = oEmailNotifierToolbarButton.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.CHECK_NEW_EMAIL_INTERVAL);
  13598.             var iMinutesFromPref = this.GetCheckIntervalPref();
  13599.             if (iMinutesFromPref && isFinite(iMinutesFromPref)) {
  13600.                 iMinutes = iMinutesFromPref;
  13601.             }
  13602.         }
  13603.         return iMinutes * 60 * 1000;
  13604.     },
  13605.  
  13606.     OnCommandMenuItemMailAccount: function(event) {
  13607.         var objXULMenuItem = event.target;
  13608.  
  13609.         var strEMail = objXULMenuItem.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.EMAIL);
  13610.         var strPassword = objXULMenuItem.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.PASSWORD);
  13611.         var iAccountType = objXULMenuItem.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.ACCOUNT_TYPE);
  13612.         var isAutoLogin = objXULMenuItem.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.AUTO_LOGIN);
  13613.         isAutoLogin = isAutoLogin == 'true' ? true : false;
  13614.         var strPop3Server = objXULMenuItem.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.POP3_SERVER);
  13615.         var strPop3Port = objXULMenuItem.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.POP3_PORT);
  13616.  
  13617.         var objMailAccount = EBEMailNotifierManager_CT2384137.GetAccountObjectByType(iAccountType,
  13618.                                                                             strEMail,
  13619.                                                                             strPassword,
  13620.                                                                             strPop3Server,
  13621.                                                                             strPop3Port);
  13622.  
  13623.         if (objMailAccount) {
  13624.             if (isAutoLogin) {
  13625.                 objMailAccount.Login(event);
  13626.             }
  13627.             else {
  13628.                 objMailAccount.Logout(event);
  13629.             }
  13630.         }
  13631.  
  13632.  
  13633.         //request usage
  13634.         EBUsageEmailNotifier_CT2384137.OnAccountOpen();
  13635.     },
  13636.  
  13637.     GetXULToolbarMenuPopup: function() {
  13638.         var oEmailNotifierComponent = EBComponentsManager_CT2384137.GetEMailNotifierComponent();
  13639.         return oEmailNotifierComponent.dynamicMenuComponent.XULMenuPopup;
  13640.     },
  13641.  
  13642.     OnMainPopupShowing: function(event) {
  13643.         if (event.eventPhase == 2) {
  13644.             var iNumOfAccunts = 0;
  13645.  
  13646.             if (this.MailAccountsCollection && this.MailAccountsCollection.Arr) {
  13647.                 iNumOfAccunts = this.MailAccountsCollection.Arr.length;
  13648.             }
  13649.         }
  13650.     },
  13651.  
  13652.     ShowHideSeparatorCheckMenuItems: function(isHide) {
  13653.         var objXULToolbarSeparatorItem = this.GetXULToolbarSeparatorItem();
  13654.         var objXULToolbarCheckMenuItem = this.GetXULToolbarCheckForNewEMailMenuItem();
  13655.  
  13656.         if (isHide) {
  13657.             objXULToolbarSeparatorItem.setAttribute('style', 'display:none;');
  13658.             objXULToolbarCheckMenuItem.setAttribute('style', 'display:none;');
  13659.         }
  13660.         else {
  13661.             objXULToolbarSeparatorItem.removeAttribute('style');
  13662.             objXULToolbarCheckMenuItem.removeAttribute('style');
  13663.         }
  13664.     },
  13665.  
  13666.     //the separator that separates between the accounts and the configuration
  13667.     GetXULToolbarSeparatorItem: function() {
  13668.         var objXULMenuPopup = this.GetXULToolbarMenuPopup();
  13669.         return objXULMenuPopup.childNodes[objXULMenuPopup.childNodes.length - 3];
  13670.     },
  13671.  
  13672.     GetXULToolbarCheckForNewEMailMenuItem: function() {
  13673.         var objXULMenuPopup = this.GetXULToolbarMenuPopup();
  13674.         return objXULMenuPopup.childNodes[objXULMenuPopup.childNodes.length - 2];
  13675.     },
  13676.  
  13677.     UpdateButtonNewMessages: function(iNewMessages) {
  13678.         var iCurrentTotalNewMessages = this.GetToolbarButtonTotalNewMessages();
  13679.         iCurrentTotalNewMessages += parseInt(iNewMessages);
  13680.  
  13681.         if (iCurrentTotalNewMessages < 0) {
  13682.             iCurrentTotalNewMessages = 0;
  13683.         }
  13684.         this.SetToolbarButtonCaption(iCurrentTotalNewMessages);
  13685.     },
  13686.  
  13687.     SetToolbarButtonCaption: function(iNewMessages) {
  13688.         var oEmailNotifier = EBComponentsManager_CT2384137.GetEMailNotifierComponent();
  13689.         if (oEmailNotifier) {
  13690.             var strCaption = '[' + iNewMessages + ']';
  13691.             oEmailNotifier.UpdateUI(strCaption);
  13692.             var oEmailNotifierToolbarButton = EBComponentsManager_CT2384137.GetEMailNotifierToolbarButton();
  13693.             oEmailNotifierToolbarButton.setAttribute(EBEMailNotifierConsts_CT2384137.Attributes.TOTAL_NEW_MESSAGES, iNewMessages);
  13694.         }
  13695.     },
  13696.  
  13697.     GetToolbarButtonTotalNewMessages: function() {
  13698.         var iTotalNewMessages = 0;
  13699.         var oEmailNotifierToolbarButton = EBComponentsManager_CT2384137.GetEMailNotifierToolbarButton();
  13700.         if (oEmailNotifierToolbarButton) {
  13701.             var strTotalNewMessages = oEmailNotifierToolbarButton.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.TOTAL_NEW_MESSAGES);
  13702.             iTotalNewMessages = parseInt(strTotalNewMessages);
  13703.         }
  13704.  
  13705.         return iTotalNewMessages;
  13706.     },
  13707.  
  13708.     SetToolbarButtonDefaulCaption: function() {
  13709.         var oEmailNotifierToolbarButton = EBComponentsManager_CT2384137.GetEMailNotifierToolbarButton();
  13710.         var oEmailNotifier = EBComponentsManager_CT2384137.GetEMailNotifierComponent();
  13711.         if (oEmailNotifier) {
  13712.             var strDefaultCaption = oEmailNotifierToolbarButton.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.DEFAULT_CAPTION);
  13713.             oEmailNotifier.UpdateUI(strDefaultCaption);
  13714.         }
  13715.     },
  13716.  
  13717.  
  13718.     SetToolbarButtonImageTooltip: function(isStared) {
  13719.         var oEmailNotifierToolbarButton = EBComponentsManager_CT2384137.GetEMailNotifierToolbarButton();
  13720.         if (oEmailNotifierToolbarButton) {
  13721.             var strImage = EBEMailNotifierConsts_CT2384137.Images.EMailImage;
  13722.             var strTooltip = oEmailNotifierToolbarButton.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.DEFAULT_TOOLTIP);
  13723.  
  13724.             this.ButtonStared = isStared;
  13725.             if (isStared) {
  13726.                 strTooltip = oEmailNotifierToolbarButton.getAttribute(EBEMailNotifierConsts_CT2384137.Attributes.STARED_TOOLTIP);
  13727.             }
  13728.             EBImageHandler_CT2384137.UpdateStar(oEmailNotifierToolbarButton, isStared);
  13729.  
  13730.             //ask if has attribute not to ruin the  tooltip shrink 
  13731.             if (oEmailNotifierToolbarButton.hasAttribute('tooltiptext')) {
  13732.                 oEmailNotifierToolbarButton.setAttribute('tooltiptext', strTooltip);
  13733.             }
  13734.         }
  13735.     },
  13736.  
  13737.     GetMailAccountFullCaption: function(objAccountData) {
  13738.         return objAccountData.AccountName;
  13739.     },
  13740.  
  13741.     GetMailAccountAccelText: function(objAccountData) {
  13742.         var iNewMessages = objAccountData.NewMessages;
  13743.         var strCaption = "";
  13744.  
  13745.         if (iNewMessages >= 0)
  13746.             strCaption = ' [' + iNewMessages + ' ' + oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_GLOBAL_UNREAD") + '] ';
  13747.         else if (iNewMessages == EBEmailAccountsConsts_CT2384137.LOGIN_FAILED)
  13748.             strCaption = this.GetMailAccountFailedCaption();
  13749.         return strCaption;
  13750.  
  13751.     },
  13752.  
  13753.     GetMailAccountFailedCaption: function() {
  13754.         return ' [' + oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_EMAIL_NOTIFIER_TEST_DLG_FAILED") + ']';
  13755.     },
  13756.  
  13757.     GetMailAccountImage: function(objAccountData) {
  13758.         var strImage = '';
  13759.         if (objAccountData.Stared) {
  13760.             strImage = EBEMailNotifierConsts_CT2384137.Images.StarImage;
  13761.         }
  13762.         else if (objAccountData.NewMessages == EBEmailAccountsConsts_CT2384137.LOGIN_FAILED) {
  13763.             strImage = EBEMailNotifierConsts_CT2384137.Images.X_Image;
  13764.         }
  13765.         else {
  13766.             strImage = EBEMailNotifierConsts_CT2384137.Images.BlankImage;
  13767.         }
  13768.  
  13769.         return strImage;
  13770.     },
  13771.  
  13772.     CreateEMailNotifierToolbarFile: function(strPath) {
  13773.         var strEMailNotifierPath = EBEMailNotifierConsts_CT2384137.EMailNotifierDirectory + EBDirIO_CT2384137.sep + strPath;
  13774.         var objFile = EBIOManager_CT2384137.CreateToolbarFile(strEMailNotifierPath);
  13775.         return objFile;
  13776.     },
  13777.  
  13778.     GetToolbarAccountsXMLFile: function() {
  13779.         var objAccountsFile = this.CreateEMailNotifierToolbarFile(EBEMailNotifierConsts_CT2384137.EMailNotifierAccountsFileName);
  13780.         return objAccountsFile;
  13781.     },
  13782.  
  13783.     CheckNewEMailPlaySound: function() {
  13784.         if (this.Sound &&
  13785.             this.Sound != EBEMailNotifierConsts_CT2384137.Sound.NONE) {
  13786.             var strSoundFilePath = '';
  13787.             if (this.Sound == EBEMailNotifierConsts_CT2384137.Sound.DEFAULT) {
  13788.                 strSoundFilePath = EBEMailNotifierConsts_CT2384137.Sound.DefaultWavChromePath;
  13789.             }
  13790.             else {
  13791.                 strSoundFilePath = this.Sound;
  13792.             }
  13793.             EBGlobalManager_CT2384137.PlaySound(strSoundFilePath);
  13794.         }
  13795.     },
  13796.  
  13797.     SetCurrentSound: function() {
  13798.         this.Sound = this.GetSoundPref();
  13799.     },
  13800.  
  13801.     GetSoundPrefName: function() {
  13802.         var strPrefName = EBPreferenceConsts_CT2384137.EMailNotifierSound;
  13803.         return strPrefName;
  13804.     },
  13805.  
  13806.     SaveSoundPref: function(strSound) {
  13807.         var strSoundPrefName = this.GetSoundPrefName();
  13808.         EBToolbarPreferenceManager_CT2384137.SetPref(strSoundPrefName, strSound);
  13809.     },
  13810.  
  13811.     GetSoundPref: function() {
  13812.         var strSoundPrefName = this.GetSoundPrefName();
  13813.  
  13814.         var strSound = '';
  13815.         if (!EBToolbarPreferenceManager_CT2384137.HasUserValue(strSoundPrefName)) {
  13816.             strSound = EBEMailNotifierConsts_CT2384137.Sound.NONE;
  13817.         }
  13818.         else {
  13819.             strSound = EBToolbarPreferenceManager_CT2384137.GetPref(strSoundPrefName);
  13820.         }
  13821.  
  13822.         return strSound;
  13823.     },
  13824.  
  13825.     GetCheckIntervalPrefName: function() {
  13826.         var strPrefName = EBPreferenceConsts_CT2384137.EMailNotifierCheckInterval;
  13827.         return strPrefName;
  13828.     },
  13829.  
  13830.     SaveCheckIntervalPref: function(iMinutesValue) {
  13831.         var strCheckIntervalPrefName = this.GetCheckIntervalPrefName();
  13832.         EBToolbarPreferenceManager_CT2384137.SetPref(strCheckIntervalPrefName, iMinutesValue);
  13833.     },
  13834.  
  13835.     GetCheckIntervalPref: function() {
  13836.         var strCheckIntervalPrefName = this.GetCheckIntervalPrefName();
  13837.         var iMinutesValue = EBToolbarPreferenceManager_CT2384137.GetPref(strCheckIntervalPrefName);
  13838.  
  13839.         return iMinutesValue;
  13840.     },
  13841.  
  13842.  
  13843.     AccountsFileToAccountsCollection: function() {
  13844.         var objAccountsCollection = new EBArrayCollection_CT2384137();
  13845.  
  13846.         var strContent = this.LoadAccountsFile();
  13847.  
  13848.         if (!strContent)
  13849.             return objAccountsCollection;
  13850.  
  13851.         var XMLDoc = EBXML_CT2384137.GetXmlDocument(strContent);
  13852.         var XMLRoot = XMLDoc.documentElement;
  13853.  
  13854.         var objAccountData = null;
  13855.  
  13856.         if (XMLRoot.tagName == EBEMailNotifierConsts_CT2384137.XML.ACCOUNTS) {
  13857.             var objXMLAccounts = XMLRoot.getElementsByTagName(EBEMailNotifierConsts_CT2384137.XML.ACCOUNT);
  13858.             var objXMLAccount = null;
  13859.             var objXMLNode = null;
  13860.  
  13861.             var strName = '';
  13862.             var strEMail = '';
  13863.             var strPassword = '';
  13864.             var strServer = '';
  13865.             var iPort = 0;
  13866.             var iType = -1;
  13867.             var isAutoLogin = true;
  13868.             var isStared = false;
  13869.             var iNewMessages = 0;
  13870.  
  13871.             for (var i = 0; i < objXMLAccounts.length; i++) {
  13872.                 objXMLAccount = objXMLAccounts.item(i);
  13873.                 for (var j = 0; j < objXMLAccount.childNodes.length; j++) {
  13874.                     objXMLNode = objXMLAccount.childNodes[j];
  13875.                     if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.NAME) {
  13876.                         strName = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13877.                     }
  13878.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.EMAIL) {
  13879.                         strEMail = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13880.                     }
  13881.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.PASSWORD) {
  13882.                         strPassword = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13883.                     }
  13884.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.SERVER) {
  13885.                         strServer = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13886.                     }
  13887.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.PORT) {
  13888.                         iPort = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13889.                     }
  13890.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.TYPE) {
  13891.                         iType = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13892.                     }
  13893.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.AUTO_LOGIN) {
  13894.                         var strIsLogin = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13895.                         isAutoLogin = strIsLogin == 'true' ? true : false;
  13896.                     }
  13897.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.STARED) {
  13898.                         var strIsStared = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13899.                         isStared = strIsStared == 'true' ? true : false;
  13900.                     }
  13901.                     else if (objXMLNode.tagName == EBEMailNotifierConsts_CT2384137.XML.NEW_MESSAGES) {
  13902.                         iNewMessages = EBXML_CT2384137.GetXmlNodeValue(objXMLNode);
  13903.                     }
  13904.  
  13905.                 }
  13906.  
  13907.                 objAccountData = new EBEMailAccountDataObject_CT2384137(strName,
  13908.                                                             strEMail,
  13909.                                                             strPassword,
  13910.                                                             iType,
  13911.                                                             isAutoLogin,
  13912.                                                             isStared,
  13913.                                                             iNewMessages,
  13914.                                                             strServer,
  13915.                                                             iPort);
  13916.  
  13917.                 objAccountsCollection.AppendElement(objAccountData);
  13918.             }
  13919.         }
  13920.  
  13921.         return objAccountsCollection;
  13922.     },
  13923.  
  13924.     AccountsCollectionToAccountsFile: function(objAccountsCollection) {
  13925.         var strRootXML = '<' + EBEMailNotifierConsts_CT2384137.XML.ACCOUNTS + '></' + EBEMailNotifierConsts_CT2384137.XML.ACCOUNTS + '>'
  13926.         var XMLDoc = EBXML_CT2384137.GetXmlDocument(strRootXML);
  13927.  
  13928.         var XMLRoot = XMLDoc.documentElement;
  13929.  
  13930.         var XMLNodeAccount = null;
  13931.         var XMLNodeName = null;
  13932.         var XMLNodeEMail = null;
  13933.         var XMLNodePassword = null;
  13934.         var XMLNodeServer = null;
  13935.         var XMLNodePort = null;
  13936.         var XMLNodeType = null;
  13937.         var XMLNodeAutoLogin = null;
  13938.         var XMLNodeStared = null;
  13939.         var XMLNodeNewMessages = null;
  13940.  
  13941.         var arrAccounts = objAccountsCollection.Arr;
  13942.  
  13943.         for (var i = 0; i < arrAccounts.length; i++) {
  13944.             XMLNodeAccount = XMLDoc.createElement(EBEMailNotifierConsts_CT2384137.XML.ACCOUNT);
  13945.  
  13946.             XMLNodeName = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13947.                                                                     EBEMailNotifierConsts_CT2384137.XML.NAME,
  13948.                                                                     arrAccounts[i].AccountName);
  13949.             XMLNodeEMail = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13950.                                                                     EBEMailNotifierConsts_CT2384137.XML.EMAIL,
  13951.                                                                     arrAccounts[i].EMailAddress);
  13952.             XMLNodePassword = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13953.                                                                     EBEMailNotifierConsts_CT2384137.XML.PASSWORD,
  13954.                                                                     arrAccounts[i].Password);
  13955.             XMLNodeServer = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13956.                                                                     EBEMailNotifierConsts_CT2384137.XML.SERVER,
  13957.                                                                     arrAccounts[i].Pop3Server);
  13958.             XMLNodePort = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13959.                                                                     EBEMailNotifierConsts_CT2384137.XML.PORT,
  13960.                                                                     arrAccounts[i].Pop3Port);
  13961.             XMLNodeType = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13962.                                                                     EBEMailNotifierConsts_CT2384137.XML.TYPE,
  13963.                                                                     arrAccounts[i].AccountType);
  13964.             XMLNodeAutoLogin = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13965.                                                                     EBEMailNotifierConsts_CT2384137.XML.AUTO_LOGIN,
  13966.                                                                     arrAccounts[i].AutoLogin);
  13967.             XMLNodeStared = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13968.                                                                     EBEMailNotifierConsts_CT2384137.XML.STARED,
  13969.                                                                     arrAccounts[i].Stared);
  13970.             XMLNodeNewMessages = EBXML_CT2384137.CreateXmlTextNode(XMLDoc,
  13971.                                                                     EBEMailNotifierConsts_CT2384137.XML.NEW_MESSAGES,
  13972.                                                                     arrAccounts[i].NewMessages);
  13973.             XMLNodeAccount.appendChild(XMLNodeName);
  13974.             XMLNodeAccount.appendChild(XMLNodeEMail);
  13975.             XMLNodeAccount.appendChild(XMLNodePassword);
  13976.             XMLNodeAccount.appendChild(XMLNodeServer);
  13977.             XMLNodeAccount.appendChild(XMLNodePort);
  13978.             XMLNodeAccount.appendChild(XMLNodeType);
  13979.             XMLNodeAccount.appendChild(XMLNodeAutoLogin);
  13980.             XMLNodeAccount.appendChild(XMLNodeStared);
  13981.             XMLNodeAccount.appendChild(XMLNodeNewMessages);
  13982.  
  13983.             XMLRoot.appendChild(XMLNodeAccount);
  13984.         }
  13985.  
  13986.         var strXML = EBXML_CT2384137.GetStringXml(XMLDoc);
  13987.  
  13988.         this.SaveAccountsFile(strXML);
  13989.     },
  13990.  
  13991.     SaveAccountsFile: function(strXMLContent) {
  13992.         var objAccountsFile = this.GetToolbarAccountsXMLFile();
  13993.  
  13994.         //encrypt the data
  13995.         var strEncryptContent = EBTEAEncryptionManager_CT2384137.TEAencrypt(strXMLContent, EBEMailNotifierConsts_CT2384137.EncryptionPass);
  13996.  
  13997.         //write the data to the accounts xml file
  13998.         EBFileIO_CT2384137.write(objAccountsFile, strEncryptContent, "", EBGlobalConsts_CT2384137.DefaultCharset);
  13999.     },
  14000.  
  14001.     LoadAccountsFile: function() {
  14002.         var strXMLContent = '';
  14003.         var objAccountsFile = this.GetToolbarAccountsXMLFile();
  14004.         var strEncryptContent = EBFileIO_CT2384137.read(objAccountsFile, EBGlobalConsts_CT2384137.DefaultCharset);
  14005.  
  14006.         //check if this data is encrypted first(for older version of the toolabr - before we encrypted the data).
  14007.         if (strEncryptContent) {
  14008.             //try to load it to an xml first
  14009.             if (strEncryptContent.indexOf(EBEMailNotifierConsts_CT2384137.XML.ACCOUNTS) != -1) {
  14010.                 var XMLDoc = EBXML_CT2384137.GetXmlDocument(strEncryptContent);
  14011.                 var XMLRoot = XMLDoc.documentElement;
  14012.                 if (XMLRoot.tagName != "parsererror" && XMLRoot.tagName == EBEMailNotifierConsts_CT2384137.XML.ACCOUNTS)
  14013.                     strXMLContent = strEncryptContent;
  14014.             }
  14015.  
  14016.             if (!strXMLContent)
  14017.                 strXMLContent = EBTEAEncryptionManager_CT2384137.TEAdecrypt(strEncryptContent, EBEMailNotifierConsts_CT2384137.EncryptionPass);
  14018.         }
  14019.  
  14020.         return strXMLContent;
  14021.     }
  14022. };
  14023.  
  14024. var EBEmailNotifierManager_CT2384137 =
  14025. {
  14026.     xulBrowser: null,
  14027.     IsLogout: false,
  14028.     IsLoggedIn: false,
  14029.     IsListenerSet: false,
  14030.     Done: false,
  14031.  
  14032.     AccountInfo:
  14033.     {
  14034.         objCallback: null,
  14035.         objFindInboxFunc: null,
  14036.         loginUrl: '',
  14037.         userName: '',
  14038.         pass: '',
  14039.         userNameFieldId: '',
  14040.         passFieldId: '',
  14041.         submitButtonId: '',
  14042.         frameName: '',
  14043.         formName: '',
  14044.         secWarnEnt: null,
  14045.         secWarnExt: null,
  14046.         secWarnMixed: null
  14047.     },
  14048.  
  14049.     ArrCheckedEmails: null,
  14050.  
  14051.     InitArray: function() {
  14052.         if (this.ArrCheckedEmails == null) {
  14053.             this.ArrCheckedEmails = new Array();
  14054.         }
  14055.     },
  14056.  
  14057.     EmailCheckedInbox: function(strEmail) {
  14058.         for (var i = 0; i < this.ArrCheckedEmails.length; i++) {
  14059.             if (this.ArrCheckedEmails[i].userName == strEmail) {
  14060.                 return this.ArrCheckedEmails[i].iInbox;
  14061.             }
  14062.         }
  14063.  
  14064.         return -1;
  14065.     },
  14066.  
  14067.     UpdateInboxOfAccount: function(iInbox) {
  14068.         this.ArrCheckedEmails[this.ArrCheckedEmails.length - 1].iInbox = iInbox;
  14069.     },
  14070.  
  14071.     OnDone: function(iInbox) {
  14072.         try {
  14073.             this.xulBrowser.removeProgressListener(EmailWebListener_CT2384137);
  14074.         }
  14075.         catch (ex) { }
  14076.  
  14077.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  14078.  
  14079.         this.xulBrowser.loadURIWithFlags('about:blank', oWindow.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY, null, null);
  14080.         this.IsListenerSet = false;
  14081.         this.Done = true;
  14082.         this.UpdateInboxOfAccount(iInbox);
  14083.         this.AccountInfo.objCallback(iInbox);
  14084.         EBPreferenceService_CT2384137.SetPref("security.warn_entering_secure", this.AccountInfo.secWarnEnt);
  14085.         EBPreferenceService_CT2384137.SetPref("security.warn_leaving_secure", this.AccountInfo.secWarnExt);
  14086.         EBPreferenceService_CT2384137.SetPref("security.warn_viewing_mixed", this.AccountInfo.secWarnMixed);
  14087.     },
  14088.  
  14089.     CheckError: function(strUserName, strLoginUrl) {
  14090.         if (strUserName == EBEmailNotifierManager_CT2384137.AccountInfo.userName
  14091.             &&
  14092.             strLoginUrl == EBEmailNotifierManager_CT2384137.AccountInfo.loginUrl
  14093.             &&
  14094.            !EBEmailNotifierManager_CT2384137.Done) {
  14095.             this.OnDone(EBEmailAccountsConsts_CT2384137.LOGIN_FAILED);
  14096.         }
  14097.     },
  14098.  
  14099.     UpdateAccountInfo: function(objCallback, objFindInboxFunc, loginUrl, userName, pass, userNameFieldId, passFieldId, submitButtonId, frameName, formName) {
  14100.         this.AccountInfo.objCallback = objCallback;
  14101.         this.AccountInfo.objFindInboxFunc = objFindInboxFunc;
  14102.         this.AccountInfo.loginUrl = loginUrl;
  14103.         this.AccountInfo.userName = userName;
  14104.         this.AccountInfo.pass = pass;
  14105.         this.AccountInfo.userNameFieldId = userNameFieldId;
  14106.         this.AccountInfo.passFieldId = passFieldId;
  14107.         this.AccountInfo.submitButtonId = submitButtonId;
  14108.         this.AccountInfo.frameName = frameName;
  14109.         this.AccountInfo.formName = formName;
  14110.         this.AccountInfo.secWarnEnt = EBPreferenceService_CT2384137.GetPref("security.warn_entering_secure");
  14111.         this.AccountInfo.secWarnExt = EBPreferenceService_CT2384137.GetPref("security.warn_leaving_secure");
  14112.         this.AccountInfo.secWarnMixed = EBPreferenceService_CT2384137.GetPref("security.warn_viewing_mixed");
  14113.         this.ArrCheckedEmails.push(new EBEmailAccount_CT2384137(userName));
  14114.     },
  14115.  
  14116.     ClearAccountInfo: function() {
  14117.         this.AccountInfo.objCallback = null;
  14118.         this.AccountInfo.objFindInboxFunc = null;
  14119.         this.AccountInfo.loginUrl = null;
  14120.         this.AccountInfo.userName = null;
  14121.         this.AccountInfo.pass = null;
  14122.         this.AccountInfo.userNameFieldId = null;
  14123.         this.AccountInfo.passFieldId = null;
  14124.         this.AccountInfo.submitButtonId = null;
  14125.         this.AccountInfo.frameName = null;
  14126.         this.AccountInfo.formName = null;
  14127.     },
  14128.  
  14129.     CheckForEmails: function(objCallback, objFindInboxFunc, logoutUrl, loginUrl, userName, pass, userNameFieldId, passFieldId, submitButtonId, frameName, formName) {
  14130.         //check only once patch, for older FF versions (FF2 and down)
  14131.         this.InitArray();
  14132.         if (!EBGlobalManager_CT2384137.IsFirefox3()) {
  14133.             var iInbx = this.EmailCheckedInbox(userName);
  14134.             if (iInbx != -1) {
  14135.                 objCallback(iInbx);
  14136.                 return;
  14137.             }
  14138.         }
  14139.  
  14140.         this.IsLoggedIn = false;
  14141.         this.Done = false;
  14142.         this.UpdateAccountInfo(objCallback, objFindInboxFunc, loginUrl, userName, pass, userNameFieldId, passFieldId, submitButtonId, frameName, formName);
  14143.         EBPreferenceService_CT2384137.SetPref("security.warn_entering_secure", false);
  14144.         EBPreferenceService_CT2384137.SetPref("security.warn_leaving_secure", false);
  14145.         EBPreferenceService_CT2384137.SetPref("security.warn_viewing_mixed", false);
  14146.  
  14147.         EBWeb_CT2384137.NavigationWithCallBack(logoutUrl, EBEmailNotifierManager_CT2384137.GoToLoginPage);
  14148.         this.IsLogout = false;
  14149.  
  14150.         var checkForError = function() {
  14151.             EBEmailNotifierManager_CT2384137.CheckError(userName, loginUrl);
  14152.         };
  14153.  
  14154.         setTimeout(checkForError, 50000);
  14155.         EBEmailNotifierManager_CT2384137.xulBrowser.docShell.allowImages = false;
  14156.     },
  14157.  
  14158.     GoToLoginPage: function() {
  14159.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  14160.         EBEmailNotifierManager_CT2384137.xulBrowser.loadURIWithFlags(EBEmailNotifierManager_CT2384137.AccountInfo.loginUrl, oWindow.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY, null, null);
  14161.         if (!EBEmailNotifierManager_CT2384137.IsListenerSet) {
  14162.             EBEmailNotifierManager_CT2384137.xulBrowser.addProgressListener(EmailWebListener_CT2384137);
  14163.             EBEmailNotifierManager_CT2384137.IsListenerSet = true;
  14164.         }
  14165.     },
  14166.  
  14167.     Login: function(objDocument) {
  14168.         if (this.IsLoggedIn)
  14169.             return;
  14170.  
  14171.         var oName = objDocument.getElementById(this.AccountInfo.userNameFieldId);
  14172.         var oPass = objDocument.getElementById(this.AccountInfo.passFieldId);
  14173.         var oSubmit = objDocument.getElementById(this.AccountInfo.submitButtonId);
  14174.         if (oName && oPass && oSubmit) {
  14175.             oName.value = this.AccountInfo.userName;
  14176.             oPass.value = this.AccountInfo.pass;
  14177.             var oldValSignon = EBPreferenceService_CT2384137.GetPref("signon.rememberSignons");
  14178.             EBPreferenceService_CT2384137.SetPref("signon.rememberSignons", false);
  14179.             if (this.AccountInfo.formName)
  14180.                 oSubmit.click();
  14181.             else
  14182.                 objDocument.forms[0].submit();
  14183.  
  14184.             EBPreferenceService_CT2384137.SetPref("signon.rememberSignons", oldValSignon);
  14185.             this.IsLoggedIn = true;
  14186.         }
  14187.     },
  14188.  
  14189.     GetAllFrames: function(objDoc) {
  14190.         var arrFrames = objDoc.getElementsByTagName('frame');
  14191.         var arrIFrames = objDoc.getElementsByTagName('iframe');
  14192.         var arr = new Array();
  14193.         var i;
  14194.         for (i = 0; i < arrFrames.length; i++)
  14195.             arr.push(arrFrames[i]);
  14196.  
  14197.         for (i = 0; i < arrIFrames.length; i++)
  14198.             arr.push(arrIFrames[i]);
  14199.  
  14200.         return arr;
  14201.     },
  14202.  
  14203.     FindInbox: function(objDocument, isDocument) {
  14204.         //if continue button is found, click it and return
  14205.         if (this.CheckIntermidiatePage(objDocument, isDocument)) return;
  14206.         var iInbox = null;
  14207.         var arrFrames = this.GetAllFrames(objDocument);
  14208.  
  14209.         var oFrame;
  14210.         if (arrFrames.length > 0) {
  14211.             for (var i = 0; i < arrFrames.length; i++) {
  14212.                 oFrame = arrFrames[i];
  14213.                 if (this.AccountInfo.frameName && oFrame.name == this.AccountInfo.frameName
  14214.                     || !this.AccountInfo.frameName) {
  14215.                     iInbox = this.AccountInfo.objFindInboxFunc(oFrame.contentWindow.document);
  14216.                     if (iInbox != null)
  14217.                         break;
  14218.                 }
  14219.             }
  14220.         }
  14221.         if (iInbox == null && !this.AccountInfo.frameName) {
  14222.             iInbox = this.AccountInfo.objFindInboxFunc(objDocument);
  14223.         }
  14224.  
  14225.         if (iInbox != null)
  14226.             this.OnDone(iInbox);
  14227.     },
  14228.  
  14229.     CheckIntermidiatePage: function(objDocument, isDocument) {
  14230.         var btnContinue = objDocument.getElementById("TakeMeToInbox");
  14231.         if (btnContinue && isDocument) {
  14232.             btnContinue.click();
  14233.             return true;
  14234.         }
  14235.  
  14236.         return false;
  14237.     },
  14238.  
  14239.     DocumentComplete: function(aProgress, isDocument) {
  14240.         var objDocument = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(aProgress.DOMWindow).document;
  14241.         if (this.IsLogout) {
  14242.             this.IsLogout = false;
  14243.             this.GoToLoginPage(objDocument);
  14244.         }
  14245.         else if (!this.IsLoggedIn) {
  14246.             this.Login(objDocument);
  14247.         }
  14248.         else {
  14249.             this.FindInbox(objDocument, isDocument);
  14250.         }
  14251.     }
  14252. };
  14253.  
  14254. function EBEmailAccount_CT2384137(userName) {
  14255.     this.userName = userName;
  14256.     this.iInbox = 0;
  14257. };/*************************** facebook commands  ******************************/
  14258. var EBFacebookCommands_CT2384137 =
  14259. {
  14260.     FB_LOGIN: function() {
  14261.         var facebookComp = EBComponentsManager_CT2384137.GetFacebookComponent();
  14262.         var settingObj = oToolbar_CT2384137.facebook.manager.facebookSettings;
  14263.         var urlStr = settingObj.gadget.facebookLoginUrl;
  14264.         urlStr = urlStr.replace(/EB_FB_API_KEY/g, oToolbar_CT2384137.facebook.consts.FB_APP_API_KEY);
  14265.         urlStr = urlStr.replace(/EB_FB_CANCEL_URL/g, oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookFailureUrl);
  14266.  
  14267.         var perms = oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookGetInboxPermission + "," + oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookSetStatusPermission;
  14268.         urlStr = urlStr.replace(/EB_FB_PERMISSIONS_ARRAY/g, perms);
  14269.         var successUrl = oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookSuccessUrl;
  14270.         urlStr = urlStr.replace(/EB_FB_SUCCESS_URL/g, successUrl.substr(0, successUrl.indexOf("?xxRESULTTOKENxx")));
  14271.         facebookComp.openFacebookGadgetWindow(urlStr, oToolbar_CT2384137.facebook.consts.gadgetType.login, settingObj.gadget.facebookLoginHeight, settingObj.gadget.facebookLoginWidth);
  14272.     },
  14273.  
  14274.     FB_INBOX: function() {
  14275.         var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14276.         EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14277.  
  14278.  
  14279.         var urlStr = oToolbar_CT2384137.facebook.manager.facebookSettings.links.facebookInboxUrl;
  14280.         urlStr = urlStr.replace(/EB_FB_API_KEY/g, oToolbar_CT2384137.facebook.consts.FB_APP_API_KEY);
  14281.         urlStr = urlStr.replace(/EB_FB_SESSION_KEY/g, oToolbar_CT2384137.facebook.manager.sessionKey);
  14282.         EBLinkManager_CT2384137.LoadLinkURL(null, urlStr, "SELF");
  14283.     },
  14284.  
  14285.     FB_FRIENDS: function() {
  14286.         var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14287.         EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14288.         var urlStr = oToolbar_CT2384137.facebook.manager.facebookSettings.requests.facebookRequestsUrl;
  14289.         urlStr = urlStr.replace(/EB_FB_REQ_TYPE/g, oToolbar_CT2384137.facebook.manager.facebookSettings.requests.facebookReqFriend);
  14290.         urlStr = urlStr.replace(/EB_FB_API_KEY/g, oToolbar_CT2384137.facebook.consts.FB_APP_API_KEY);
  14291.         urlStr = urlStr.replace(/EB_FB_SESSION_KEY/g, oToolbar_CT2384137.facebook.manager.sessionKey);
  14292.         EBLinkManager_CT2384137.LoadLinkURL(null, urlStr, "SELF");
  14293.     },
  14294.  
  14295.     FB_GROUPS: function() {
  14296.         var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14297.         EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14298.         var urlStr = oToolbar_CT2384137.facebook.manager.facebookSettings.requests.facebookRequestsUrl;
  14299.         urlStr = urlStr.replace(/EB_FB_REQ_TYPE/g, oToolbar_CT2384137.facebook.manager.facebookSettings.requests.facebookReqGroup);
  14300.         urlStr = urlStr.replace(/EB_FB_API_KEY/g, oToolbar_CT2384137.facebook.consts.FB_APP_API_KEY);
  14301.         urlStr = urlStr.replace(/EB_FB_SESSION_KEY/g, oToolbar_CT2384137.facebook.manager.sessionKey);
  14302.         EBLinkManager_CT2384137.LoadLinkURL(null, urlStr, "SELF");
  14303.     },
  14304.  
  14305.     FB_EVENTS: function() {
  14306.         var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14307.         EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14308.         var urlStr = oToolbar_CT2384137.facebook.manager.facebookSettings.requests.facebookRequestsUrl;
  14309.         urlStr = urlStr.replace(/EB_FB_REQ_TYPE/g, oToolbar_CT2384137.facebook.manager.facebookSettings.requests.facebookReqEvent);
  14310.         urlStr = urlStr.replace(/EB_FB_API_KEY/g, oToolbar_CT2384137.facebook.consts.FB_APP_API_KEY);
  14311.         urlStr = urlStr.replace(/EB_FB_SESSION_KEY/g, oToolbar_CT2384137.facebook.manager.sessionKey);
  14312.         EBLinkManager_CT2384137.LoadLinkURL(null, urlStr, "SELF");
  14313.     },
  14314.  
  14315.     FB_SHARE: function() {
  14316.  
  14317.  
  14318.         var settingObj = oToolbar_CT2384137.facebook.manager.facebookSettings;
  14319.         var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14320.         EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14321.  
  14322.         var urlStr = settingObj.gadget.facebookSharerUrl;
  14323.         urlStr = urlStr.replace(/EB_MAIN_FRAME_URL/g, encodeURIComponent(EBGlobalManager_CT2384137.GetMostRecentBrowserWindow().EBUrl_CT2384137.GetPageUrl()).replace("'", "\\'", 'g'));
  14324.  
  14325.  
  14326.         var facebookComp = EBComponentsManager_CT2384137.GetFacebookComponent();
  14327.         facebookComp.openFacebookGadgetWindow(urlStr, oToolbar_CT2384137.facebook.consts.gadgetType.share, settingObj.gadget.facebookSharerHeight, settingObj.gadget.facebookSharerWidth);
  14328.     },
  14329.  
  14330.  
  14331.     FB_UPDATE_STATUS: function() {
  14332.         var settingObj = oToolbar_CT2384137.facebook.manager.facebookSettings;
  14333.         var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14334.         EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14335.         var callbackForGetPermissions = function(permissions) {
  14336.             if (permissions == "1")
  14337.                 oToolbar_CT2384137.facebook.manager.getUserDataForUpdateStatus(function(strJson, type) { EBComponentsManager_CT2384137.GetFacebookComponent().callbackForGetDataForUpdateStatus(strJson, type); });
  14338.             else {
  14339.                 var facebookComp = EBComponentsManager_CT2384137.GetFacebookComponent();
  14340.                 var successUrl = oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookPermissionUrl;
  14341.                 successUrl = successUrl.replace(/EB_FB_SUCCESS_URL/g, oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookSuccessUrl);
  14342.                 successUrl = successUrl.replace(/EB_FB_API_KEY/g, oToolbar_CT2384137.facebook.consts.FB_APP_API_KEY);
  14343.                 successUrl = successUrl.replace(/EB_FB_PERMISSION/g, oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookSetStatusPermission);
  14344.  
  14345.  
  14346.                 var urlStr = settingObj.gadget.facebookLoginUrl;
  14347.                 urlStr = urlStr.replace(/EB_FB_API_KEY/g, "");
  14348.                 urlStr = urlStr.replace(/EB_FB_CANCEL_URL/g, oToolbar_CT2384137.facebook.manager.facebookSettings.gadget.facebookFailureUrl);
  14349.                 urlStr = urlStr.replace(/EB_FB_SUCCESS_URL/g, encodeURIComponent(successUrl).replace("'", "\\'", 'g'));
  14350.  
  14351.                 facebookComp.openFacebookGadgetWindow(urlStr, oToolbar_CT2384137.facebook.consts.gadgetType.getUpdateStatusPermission, settingObj.gadget.facebookLoginHeight, settingObj.gadget.facebookLoginWidth);
  14352.             }
  14353.         };
  14354.  
  14355.         oToolbar_CT2384137.facebook.manager.checkUpdateStatusPermission(callbackForGetPermissions);
  14356.     },
  14357.  
  14358.     FB_LOGOUT: function() {
  14359.         var title = oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_FACEBOOK_LOGOUT_DIALOG_TITLE");
  14360.         var message = oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_FACEBOOK_LOGOUT_DIALOG_TEXT");
  14361.         if (EBGlobalManager_CT2384137.Confirm(window, title, message)) {
  14362.             var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14363.             EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14364.             oToolbar_CT2384137.facebook.manager.logout();
  14365.         }
  14366.     },
  14367.  
  14368.     FB_SETTINGS: function() {
  14369.         var facebookItem = EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14370.         EBUsageFacebook_CT2384137.OnItemClick(facebookItem.UniqueCompID, facebookItem.UniqueCompID, facebookItem.CompType);
  14371.         oToolbar_CT2384137.facebook.manager.alertsManager.openSettingsDialog(window);
  14372.     },
  14373.  
  14374.     ActivateSpecialCommand: function(event, strCommandId) {
  14375.         switch (strCommandId.toUpperCase()) {
  14376.             case "FB_LOGIN":
  14377.                 this.FB_LOGIN();
  14378.                 break;
  14379.             case "FB_INBOX":
  14380.                 this.FB_INBOX();
  14381.                 break;
  14382.             case "FB_FRIENDS":
  14383.                 this.FB_FRIENDS();
  14384.                 break;
  14385.             case "FB_GROUPS":
  14386.                 this.FB_GROUPS();
  14387.                 break;
  14388.             case "FB_EVENTS":
  14389.                 this.FB_EVENTS();
  14390.                 break;
  14391.             case "FB_SHARE":
  14392.                 this.FB_SHARE();
  14393.                 break;
  14394.             case "FB_UPDATE_STATUS":
  14395.                 this.FB_UPDATE_STATUS();
  14396.                 break;
  14397.             case "FB_LOGOUT":
  14398.                 this.FB_LOGOUT();
  14399.                 break;
  14400.             case "FB_SETTINGS":
  14401.                 this.FB_SETTINGS();
  14402.                 break;
  14403.         }
  14404.     },
  14405.  
  14406.     IsSupportedCommand: function(strCommandId) {
  14407.         switch (strCommandId.toUpperCase()) {
  14408.             case "FB_LOGIN":
  14409.                 return true;
  14410.                 break;
  14411.             case "FB_INBOX":
  14412.                 return true;
  14413.                 break;
  14414.             case "FB_FRIENDS":
  14415.                 return true;
  14416.                 break;
  14417.             case "FB_GROUPS":
  14418.                 return true;
  14419.                 break;
  14420.             case "FB_EVENTS":
  14421.                 return true;
  14422.                 break;
  14423.             case "FB_SHARE":
  14424.                 return true;
  14425.                 break;
  14426.             case "FB_UPDATE_STATUS":
  14427.                 return true;
  14428.                 break;
  14429.             case "FB_LOGOUT":
  14430.                 return true;
  14431.                 break;
  14432.             case "FB_SETTINGS":
  14433.                 return true;
  14434.                 break;
  14435.             default: return false;
  14436.         }
  14437.     }
  14438. };
  14439.  
  14440. function EBFacebookGadgetDialog_CT2384137(oWindow, popHtmlData) {
  14441.     var facebookManager = oWindow.oToolbar_CT2384137.facebook.manager;
  14442.     var facebookDataFormSetting = oWindow.oToolbar_CT2384137.facebook.manager.facebookSettings;
  14443.     var facebookConsts = oWindow.oToolbar_CT2384137.facebook.consts;
  14444.     var facebookItem = oWindow.EBComponentsManager_CT2384137.GetFacebookComponent().ComponentItem;
  14445.     var firstTime = true;
  14446.     var firstTimeExtPerms = true;
  14447.     var _state = "first.login";
  14448.     
  14449.     var successUrlLength = facebookDataFormSetting.gadget.facebookSuccessUrl.indexOf("?xxRESULTTOKENxx");
  14450.     var failureUrlLength = facebookDataFormSetting.gadget.facebookFailureUrl.length;
  14451.     var permissionUrlLength = facebookDataFormSetting.gadget.facebookPermissionUrl.indexOf("?");
  14452.     var facebookPath = facebookConsts.FB_URL;
  14453.     var sendUsage = false;
  14454.     this.onDocumentComplete = function(xulBrowser) {
  14455.  
  14456.         var pathWIthoutParms = xulBrowser.currentURI.prePath + xulBrowser.currentURI.path.substring(0, 27);
  14457.         var usageStatus = facebookConsts.gadgetClosingType.cancel;
  14458.         var currentFullPath = xulBrowser.currentURI.prePath + xulBrowser.currentURI.path;
  14459.  
  14460.         if (currentFullPath.indexOf("login_attempt=") != -1 && firstTime) {
  14461.             window.resizeBy(0, 100);
  14462.             firstTime = false;
  14463.         }   
  14464.         if (currentFullPath.indexOf("login_attempt=") == -1 && (xulBrowser.currentURI.prePath.indexOf("login") != -1 || currentFullPath.substring(0,56).indexOf("http://www.facebook.com/connect/prompt_permissions.php?") != -1)&& firstTimeExtPerms) {
  14465.             firstTimeExtPerms = false;
  14466.             window.resizeTo(facebookDataFormSetting.gadget.facebookPermissionWidth, facebookDataFormSetting.gadget.facebookPermissionHeight);
  14467.  
  14468.         }
  14469.         if (xulBrowser.currentURI.prePath == facebookPath) {
  14470.             if (currentFullPath.substring(0, successUrlLength) == facebookDataFormSetting.gadget.facebookSuccessUrl.substring(0, successUrlLength) || currentFullPath.substring(0, failureUrlLength) == facebookDataFormSetting.gadget.facebookFailureUrl.substring(0, failureUrlLength)) {
  14471.                 switch (_state) {
  14472.                     case ("first.login"):
  14473.                         if (currentFullPath.substring(0, successUrlLength) == facebookDataFormSetting.gadget.facebookSuccessUrl.substring(0, successUrlLength)) {
  14474.                             var resArray = xulBrowser.currentURI.path.split('&');
  14475.                             var reslut;
  14476.                             for (var i = 0; i < resArray.length; i++) {
  14477.                                 reslut = resArray[i];
  14478.                                 if (reslut.indexOf("session=") != -1) {
  14479.                                     var facebookLoginJsonObj = JSON.parse(decodeURIComponent(reslut.substring(reslut.indexOf("session=") + 8)));
  14480.                                     facebookManager.cleanData();
  14481.                                     facebookManager.updateData(facebookLoginJsonObj);
  14482.                                     facebookManager.getUser();
  14483.                                     break;
  14484.                                 }
  14485.                             }
  14486.                             usageStatus = facebookConsts.gadgetClosingType.success;
  14487.                             window.close();
  14488.                         }
  14489.                         else
  14490.                             window.close();
  14491.                         break;
  14492.                     case ("readMailbox.permission"):
  14493.  
  14494.                         if (currentFullPath.substring(0, successUrlLength) == facebookDataFormSetting.gadget.facebookSuccessUrl.substring(0, successUrlLength) && xulBrowser.currentURI.path.substring(28, xulBrowser.currentURI.path.length)) {
  14495.  
  14496.                             var resArray = xulBrowser.currentURI.path.split('&');
  14497.                             var reslut;
  14498.                             for (var i = 0; i < resArray.length; i++) {
  14499.                                 reslut = resArray[i];
  14500.                                 if (reslut.indexOf("session=") != -1) {
  14501.                                     var facebookLoginJsonObj = JSON.parse(decodeURIComponent(reslut.substring(reslut.indexOf("session=") + 8)));
  14502.                                     facebookManager.cleanData();
  14503.                                     facebookManager.updateData(facebookLoginJsonObj);
  14504.                                     facebookManager.getUser();
  14505.                                     break;
  14506.                                 }
  14507.                             }
  14508.                             usageStatus = facebookConsts.gadgetClosingType.success;
  14509.                         }
  14510.                         window.close();
  14511.                         break;
  14512.                     case ("statusUpdate.permission"):
  14513.                         if (currentFullPath.substring(0, successUrlLength) == facebookDataFormSetting.gadget.facebookSuccessUrl.substring(0, successUrlLength) && xulBrowser.currentURI.path.substring(28, xulBrowser.currentURI.path.length)) {
  14514.                             facebookManager.getUserDataForUpdateStatus(function(strJson, type) { oWindow.EBComponentsManager_CT2384137.GetFacebookComponent().callbackForGetDataForUpdateStatus(strJson, type); });
  14515.                             usageStatus = facebookConsts.gadgetClosingType.success;
  14516.                         }
  14517.                         window.close();
  14518.                         break;
  14519.                 }
  14520.             }
  14521.             else {
  14522.                 if (currentFullPath.indexOf("nochrome=true") == -1 && currentFullPath.indexOf("xxRESULTTOKENxx") != -1 && _state == "readMailbox.permission" && !sendUsage) {
  14523.                     oWindow.EBUsageFacebook_CT2384137.OnReadMailboxPermGadgetOpen(popHtmlData.elementId, popHtmlData.componentId, popHtmlData.compType);
  14524.                     sendUsage = true;
  14525.                     popHtmlData.facebookGagetType = facebookConsts.gadgetType.getReadMailboxPermission;
  14526.                 }
  14527.                 else
  14528.  
  14529.                     if (currentFullPath.substring(0, permissionUrlLength) == facebookDataFormSetting.gadget.facebookPermissionUrl.substring(0, permissionUrlLength) && xulBrowser.currentURI.path.indexOf(facebookmanager.facebookSettings.gadget.facebookSetStatusPermission) != -1) {
  14530.                     window.resizeTo(facebookDataFormSetting.gadget.facebookUpdateStatusWidth, facebookDataFormSetting.gadget.facebookUpdateStatusHeight);
  14531.                     _state = "statusUpdate.permission";
  14532.                 }
  14533.                 _state = "readMailbox.permission";
  14534.             }
  14535.             window.ebCloseStatus = usageStatus;
  14536.         }
  14537.     }
  14538. };
  14539.  
  14540.  
  14541. function EBFacebookSettingsDialog_CT2384137() {
  14542.     var dialogId = "EBFacebookSettingsId";
  14543.  
  14544.     var lblAlertSettings = null;
  14545.     //var btnFaq = null;
  14546.     //var btnPrivacy = null;
  14547.     var lblChoose1 = null;
  14548.     var lblChoose2 = null;
  14549.  
  14550.     var btnAccept = null;
  14551.     var btnCancel = null;
  14552.     
  14553.     var chkEnabled = null;
  14554.     var chkFriendReq = null;
  14555.     var chkInbox = null;
  14556.     var chkGroups = null;
  14557.     var chkEvents = null;
  14558.     var chkNewsFeeds = null;
  14559.  
  14560.     var boxCheckboxesWrapper = null;
  14561.  
  14562.     var win = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  14563.     var fbAlertManager = win.oToolbar_CT2384137.facebook.manager.alertsManager;
  14564.     
  14565.     this.enableDisableCheckboxes = function(bEnabled) {
  14566.         var arrChk = boxCheckboxesWrapper.getElementsByTagName("checkbox");
  14567.         for (var i = 0; i < arrChk.length; i++)
  14568.             arrChk[i].disabled = !bEnabled;
  14569.     };
  14570.  
  14571.     this.setLocalUIVars = function() {
  14572.         lblAlertSettings = document.getElementById("lblAlertSettings"); ;
  14573.         //btnFaq = document.getElementById("btnFaq"); ;
  14574.         //btnPrivacy = document.getElementById("btnPrivacy"); ;
  14575.         lblChoose1 = document.getElementById("lblChoose1"); ;
  14576.         lblChoose2 = document.getElementById("lblChoose2"); ;
  14577.         chkEnabled = document.getElementById("chkEnabled");
  14578.         boxCheckboxesWrapper = document.getElementById("boxCheckboxesWrapper");
  14579.         chkFriendReq = document.getElementById("chkFriendReq");
  14580.         chkInbox = document.getElementById("chkInbox");
  14581.         chkGroups = document.getElementById("chkGroups");
  14582.         chkEvents = document.getElementById("chkEvents");
  14583.         chkNewsFeeds = document.getElementById("chkNewsFeeds");
  14584.  
  14585.         btnAccept = document.getElementById(dialogId).getButton("accept");
  14586.         btnCancel = document.getElementById(dialogId).getButton("cancel");
  14587.     };
  14588.  
  14589.     this.initUI = function() {
  14590.         chkEnabled.checked = fbAlertManager.enabled;
  14591.         this.enableDisableCheckboxes(chkEnabled.checked);
  14592.         
  14593.         chkFriendReq.checked = fbAlertManager.friendReqEnabled;
  14594.         chkInbox.checked = fbAlertManager.inboxEnabled;
  14595.         chkGroups.checked = fbAlertManager.groupsEnabled;
  14596.         chkEvents.checked = fbAlertManager.eventsEnabled;
  14597.         chkNewsFeeds.checked = fbAlertManager.newsFeedsEnabled;
  14598.     };
  14599.  
  14600.     this.saveChanges = function() {
  14601.         fbAlertManager.enabled = chkEnabled.checked;
  14602.         fbAlertManager.friendReqEnabled = chkFriendReq.checked;
  14603.         fbAlertManager.inboxEnabled = chkInbox.checked;
  14604.         fbAlertManager.groupsEnabled = chkGroups.checked;
  14605.         fbAlertManager.eventsEnabled = chkEvents.checked;
  14606.         fbAlertManager.newsFeedsEnabled = chkNewsFeeds.checked;
  14607.     };
  14608.  
  14609.     this.onload = function() {
  14610.         this.setLocalUIVars();
  14611.         this.initUI();
  14612.         EBUILogic_Dialog_CT2384137.fadeIn(dialogId);
  14613.         this.applyLanguagePack();
  14614.     };
  14615.  
  14616.     this.onunload = function() { };
  14617.  
  14618.     this.onclickClose = function() {
  14619.         EBUILogic_Dialog_CT2384137.fadeOut(dialogId);
  14620.     };
  14621.  
  14622.     this.onclickAlertEnabled = function() {
  14623.         this.enableDisableCheckboxes(!chkEnabled.checked);
  14624.     };
  14625.  
  14626.     this.onclickOk = function() {
  14627.         this.saveChanges();
  14628.         EBUILogic_Dialog_CT2384137.fadeOut(dialogId);
  14629.     };
  14630.     /*
  14631.     this.onclickFaq = function() {
  14632.         var strLink = win.EBActionManager_CT2384137.GetWebServerURL("FAQ");
  14633.         win.EBWeb_CT2384137.LoadURLInNewWindow(strLink);
  14634.     };
  14635.  
  14636.     this.onclickPrivacy = function() {
  14637.         var strLink = win.EBActionManager_CT2384137.GetWebServerURL("Privacy");
  14638.         win.EBWeb_CT2384137.LoadURLInNewWindow(strLink);
  14639.     };*/
  14640.  
  14641.     this.applyLanguagePack = function() {
  14642.         var dialogsDirection = win.EBGlobalManager_CT2384137.IsReverseDialogs();
  14643.         if (dialogsDirection)
  14644.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, dialogId);
  14645.  
  14646.         window.document.title = win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_DLG_TITLE');
  14647.         lblAlertSettings.value = win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_ALERT_SETTING_TITLE');
  14648.         lblChoose1.value = win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_DLG_SUBTITLE_FIRST');
  14649.         lblChoose2.value = win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_DLG_SUBTITLE_SECOND');
  14650.         chkEnabled.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_CHOOSE_FROM_OPTIONS'));
  14651.         chkFriendReq.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_ALERT_FRIEND_REQUEST'));
  14652.         chkInbox.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_ALERT_INBOX'));
  14653.         chkGroups.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_ALERT_GROUP'));
  14654.         chkEvents.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_ALERT_EVENTS'));
  14655.         chkNewsFeeds.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FACEBOOK_SETTINGS_ALERT_NEWS_FEED'));
  14656.         btnAccept.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK'));
  14657.         btnCancel.setAttribute("label", win.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL'));
  14658.     };
  14659. };
  14660. var EBFeedXMLConsts_CT2384137 =
  14661. {
  14662.     FEED: 'FEED',
  14663.     DATA: 'DATA',
  14664.     TITLE: 'TITLE',
  14665.     LINK: 'LINK',
  14666.     STARED: 'STARED',
  14667.     LANGUAGE: 'LANGUAGE',
  14668.     ITEMS: 'ITEMS',
  14669.     ITEM: 'ITEM',
  14670.     TOOLTIP: 'TOOLTIP',
  14671.     STATUS: 'STATUS',
  14672.     VISITED: 'VISITED',
  14673.     HISTORY: 'HISTORY',
  14674.     TRUE: 'TRUE',
  14675.     FALSE: 'FALSE',
  14676.     READ: 'READ',
  14677.     UNREAD: 'UNREAD',
  14678.  
  14679.     RSS_FEED_ITEM: 'RSS_FEED_ITEM',
  14680.     PERMISSIONS: 'PERMISSIONS',
  14681.     USER_ATTRIBUTES: 'USER_ATTRIBUTES',
  14682.     UNIQUE_COMP_ID: 'UNIQUE_COMP_ID',
  14683.     DISPLAY_TEXT: 'DISPLAY_TEXT',
  14684.     DISPLAY_ICON: 'DISPLAY_ICON',
  14685.     INTERVAL: 'INTERVAL',
  14686.     LIVE_MODE: 'LIVE_MODE',
  14687.     PODCAST: 'PODCAST',
  14688.     ICON_NORMAL_URL: 'ICON_NORMAL_URL',
  14689.     IMAGE_STYLE: 'IMAGE_STYLE',
  14690.  
  14691.     UserAttributesValue: '<PERMISSION>FULL</PERMISSION><SHOW_IN_CHEVRON>True</SHOW_IN_CHEVRON>',
  14692.     PermissionsValue: '<EDIT>True</EDIT><MOVE>True</MOVE><DELETE>True</DELETE>'
  14693. };
  14694.  
  14695. function EBHistoryData_CT2384137(oHistoryItemDataArrayHash)
  14696. {
  14697.     this.ArrayHash = oHistoryItemDataArrayHash;
  14698.     
  14699.     this.XMLSerialize = function()
  14700.     {
  14701.         var strXMLHistory        = EBFeedXMLConsts_CT2384137.HISTORY;
  14702.         
  14703.         var strXML = '';
  14704.         strXML += '<' + strXMLHistory + '>';
  14705.         
  14706.         var oHistoryItemData = null;
  14707.         var iCount = this.ArrayHash.Count();    
  14708.         for(var i=0;i<iCount;i++)
  14709.         {
  14710.             oHistoryItemData = this.ArrayHash.GetByIndex(i);
  14711.             strXML += oHistoryItemData.XMLSerialize();
  14712.         }
  14713.         
  14714.         strXML += '</' + strXMLHistory + '>';
  14715.         return strXML;
  14716.     };
  14717. };
  14718.  
  14719. function EBHistoryItemData_CT2384137(strLink)
  14720. {
  14721.     this.Link = strLink;
  14722.     
  14723.     this.XMLSerialize = function()
  14724.     {
  14725.         var strXML = '';
  14726.         var strXMLLink        = EBFeedXMLConsts_CT2384137.LINK;
  14727.         strXML +=    '<' + strXMLLink+ '>' +  EBXML_CT2384137.ToLegalXML(this.Link) + '</' + strXMLLink+ '>';
  14728.         return strXML;
  14729.     };
  14730. };
  14731.  
  14732. function EBFeedData_CT2384137(oFeedDataData,oFeedItemArrayHashData)
  14733. {
  14734.     this.Data        = oFeedDataData;
  14735.     this.Items        = oFeedItemArrayHashData;
  14736.  
  14737.     this.XMLSerialize = function() {
  14738.         var strXMLFeed = EBFeedXMLConsts_CT2384137.FEED;
  14739.         var strXML = '';
  14740.         strXML += '<' + strXMLFeed + '>';
  14741.         strXML += this.Data.XMLSerialize();
  14742.         strXML += this.Items.XMLSerialize();
  14743.         strXML += '</' + strXMLFeed + '>';
  14744.  
  14745.         return strXML;
  14746.     };
  14747. };
  14748.  
  14749. function EBFeedDataData_CT2384137(strTitle,strLink,bIsStared,strLanguage)
  14750. {
  14751.     this.Title        = strTitle;
  14752.     this.Link        = strLink;
  14753.     this.Stared        = bIsStared;
  14754.     this.Language    = strLanguage;
  14755.     
  14756.     this.XMLSerialize = function()
  14757.     {
  14758.         var strXMLData        = EBFeedXMLConsts_CT2384137.DATA;
  14759.         var strXMLTitle        = EBFeedXMLConsts_CT2384137.TITLE;
  14760.         var strXMLLink        = EBFeedXMLConsts_CT2384137.LINK;
  14761.         var strXMLStared    = EBFeedXMLConsts_CT2384137.STARED;
  14762.         var strXMLLanguage    = EBFeedXMLConsts_CT2384137.LANGUAGE;
  14763.         
  14764.         var strXML = '';
  14765.         strXML +=     '<' + strXMLData + '>';
  14766.         strXML +=        '<' + strXMLTitle + '>' + EBXML_CT2384137.ToLegalXML(this.Title) + '</' + strXMLTitle + '>';
  14767.         strXML +=        '<' + strXMLLink + '>' + EBXML_CT2384137.ToLegalXML(this.Link) + '</' + strXMLLink + '>';
  14768.         strXML +=        '<' + strXMLLanguage + '>' + EBXML_CT2384137.ToLegalXML(this.Language) + '</' + strXMLLanguage + '>';
  14769.         
  14770.         var strStared = this.Stared ? 
  14771.                                     EBFeedXMLConsts_CT2384137.TRUE 
  14772.                                     : 
  14773.                                     EBFeedXMLConsts_CT2384137.FALSE;
  14774.         
  14775.         strXML +=        '<' + strXMLStared + '>' + strStared + '</' + strXMLStared + '>';
  14776.         strXML +=    '</' + strXMLData + '>';
  14777.         
  14778.         return strXML;
  14779.     };
  14780. };
  14781.  
  14782. function EBFeedItemArrayHashData_CT2384137()
  14783. {
  14784.     this.ArrayHash = new EBArrayHashObject_CT2384137();
  14785.     
  14786.     this.XMLSerialize = function()
  14787.     {
  14788.         var strXMLItems        = EBFeedXMLConsts_CT2384137.ITEMS;
  14789.         
  14790.         var strXML = '';
  14791.         strXML += '<' + strXMLItems + '>';
  14792.         
  14793.         var oFeedItemData = null;
  14794.         var iCount = this.ArrayHash.Count();    
  14795.         for(var i=0;i<iCount;i++)
  14796.         {
  14797.             oFeedItemData = this.ArrayHash.GetByIndex(i);
  14798.             strXML += oFeedItemData.XMLSerialize();
  14799.         }
  14800.         
  14801.         strXML += '</' + strXMLItems + '>';
  14802.         return strXML;
  14803.     };
  14804. };
  14805.  
  14806. function EBFeedItemData_CT2384137(strTitle,strLink,strTooltip,strStatus,bVisited)
  14807. {
  14808.     this.Title        = strTitle;
  14809.     this.Link        = strLink;
  14810.     this.Tooltip    = strTooltip;
  14811.     this.Status        = strStatus;
  14812.     this.Visited    = bVisited;
  14813.     
  14814.     this.XMLSerialize = function()
  14815.     {
  14816.         var strXMLItem        = EBFeedXMLConsts_CT2384137.ITEM;
  14817.         var strXMLTitle        = EBFeedXMLConsts_CT2384137.TITLE;
  14818.         var strXMLLink        = EBFeedXMLConsts_CT2384137.LINK;
  14819.         var strXMLTooltip    = EBFeedXMLConsts_CT2384137.TOOLTIP;
  14820.         var strXMLStatus    = EBFeedXMLConsts_CT2384137.STATUS;
  14821.         var strXMLVisited    = EBFeedXMLConsts_CT2384137.VISITED;
  14822.         
  14823.         var strXML = '';
  14824.         strXML +=     '<' + strXMLItem + '>';
  14825.         strXML +=        '<' + strXMLTitle + '>' + EBXML_CT2384137.ToLegalXML(this.Title)+ '</' + strXMLTitle + '>';
  14826.         strXML +=        '<' + strXMLLink + '>' + EBXML_CT2384137.ToLegalXML(this.Link) + '</' + strXMLLink + '>';
  14827.         strXML +=        '<' + strXMLTooltip + '>' + this.Tooltip + '</' + strXMLTooltip + '>';
  14828.         strXML +=        '<' + strXMLStatus + '>' + this.Status + '</' + strXMLStatus + '>';
  14829.         
  14830.         var strVisited = this.Visited ? 
  14831.                                 EBFeedXMLConsts_CT2384137.TRUE 
  14832.                                 : 
  14833.                                 EBFeedXMLConsts_CT2384137.FALSE;
  14834.         
  14835.         strXML +=        '<' + strXMLVisited + '>' + strVisited + '</' + strXMLVisited + '>';
  14836.         strXML +=    '</' + strXMLItem + '>';
  14837.         
  14838.         return strXML;
  14839.     };
  14840. };
  14841.  
  14842. var EBFeedDataFactory_CT2384137 =
  14843. {
  14844.     XMLToHistoryData: function(XMLDoc) {
  14845.         var oHistoryData = null;
  14846.         var oHistoryItemDataArrayHash = null;
  14847.         var oHistoryItemData = null;
  14848.  
  14849.         var strXMLHistory = EBFeedXMLConsts_CT2384137.HISTORY;
  14850.  
  14851.         var XMLRoot = XMLDoc.documentElement;
  14852.         var XMLChildNode = null;
  14853.  
  14854.         if (XMLRoot.tagName == strXMLHistory) {
  14855.             oHistoryItemDataArrayHash = new EBArrayHashObject_CT2384137();
  14856.             for (var i = 0; i < XMLRoot.childNodes.length; i++) {
  14857.                 XMLChildNode = XMLRoot.childNodes[i];
  14858.                 oHistoryItemData = this.XMLToHistoryItemData(XMLChildNode);
  14859.  
  14860.                 if (oHistoryItemData) {
  14861.                     oHistoryItemDataArrayHash.Add(oHistoryItemData.Link, oHistoryItemData);
  14862.                 }
  14863.             }
  14864.             oHistoryData = new EBHistoryData_CT2384137(oHistoryItemDataArrayHash);
  14865.         }
  14866.  
  14867.         return oHistoryData;
  14868.     },
  14869.  
  14870.     XMLToHistoryItemData: function(XMLNode) {
  14871.         var oHistoryItemData = null;
  14872.  
  14873.         var strXMLLink = EBFeedXMLConsts_CT2384137.LINK;
  14874.  
  14875.         //get the correct root node (depends in this is the xml document or a regular dom node)
  14876.         var XMLRoot = XMLNode.ownerDocument ? XMLNode : XMLNode.documentElement;
  14877.         var XMLChildNode = null;
  14878.         var strLink = '';
  14879.         if (XMLRoot.tagName == strXMLLink) {
  14880.             strLink = EBXML_CT2384137.GetXmlNodeValue(XMLRoot);
  14881.             if (strLink) {
  14882.                 oHistoryItemData = new EBHistoryItemData_CT2384137(strLink);
  14883.             }
  14884.         }
  14885.  
  14886.         return oHistoryItemData;
  14887.     },
  14888.  
  14889.     XMLToFeedData: function(XMLDoc) {
  14890.         var oFeedData = null;
  14891.         var oFeedDataData = null;
  14892.         var oFeedItemArrayHashData = null;
  14893.  
  14894.         var strXMLFeed = EBFeedXMLConsts_CT2384137.FEED;
  14895.         var strXMLData = EBFeedXMLConsts_CT2384137.DATA;
  14896.         var strXMLItems = EBFeedXMLConsts_CT2384137.ITEMS;
  14897.  
  14898.         var XMLRoot = XMLDoc.documentElement;
  14899.         var XMLChildNode = null;
  14900.  
  14901.         if (XMLRoot.tagName == strXMLFeed) {
  14902.             for (var i = 0; i < XMLRoot.childNodes.length; i++) {
  14903.                 XMLChildNode = XMLRoot.childNodes[i];
  14904.                 if (XMLChildNode.tagName == strXMLData) {
  14905.                     oFeedDataData = this.XMLToFeedDataData(XMLChildNode);
  14906.                 }
  14907.                 else if (XMLChildNode.tagName == strXMLItems) {
  14908.                     oFeedItemArrayHashData = this.XMLToFeedItemArrayHashData(XMLChildNode);
  14909.                 }
  14910.             }
  14911.  
  14912.             if (oFeedDataData && oFeedItemArrayHashData) {
  14913.                 oFeedData = new EBFeedData_CT2384137(oFeedDataData, oFeedItemArrayHashData);
  14914.             }
  14915.  
  14916.         }
  14917.  
  14918.         return oFeedData;
  14919.  
  14920.     },
  14921.  
  14922.     XMLToFeedDataData: function(XMLNode) {
  14923.         var oFeedDataData = null;
  14924.  
  14925.         var strXMLData = EBFeedXMLConsts_CT2384137.DATA;
  14926.         var strXMLTitle = EBFeedXMLConsts_CT2384137.TITLE;
  14927.         var strXMLLink = EBFeedXMLConsts_CT2384137.LINK;
  14928.         var strXMLStared = EBFeedXMLConsts_CT2384137.STARED;
  14929.         var strXMLLanguage = EBFeedXMLConsts_CT2384137.LANGUAGE;
  14930.  
  14931.         //get the correct root node (depends in this is the xml document or a regular dom node)
  14932.         var XMLRoot = XMLNode.ownerDocument ? XMLNode : XMLNode.documentElement;
  14933.         var XMLChildNode = null;
  14934.  
  14935.         if (XMLRoot.tagName == strXMLData) {
  14936.             var strTitle = '';
  14937.             var strLink = '';
  14938.             var strStared = '';
  14939.             var strLanguage = '';
  14940.             var bIsStared = false;
  14941.  
  14942.             for (var i = 0; i < XMLRoot.childNodes.length; i++) {
  14943.                 XMLChildNode = XMLRoot.childNodes[i];
  14944.                 if (XMLChildNode.tagName == strXMLTitle) {
  14945.                     strTitle = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  14946.                 }
  14947.                 else if (XMLChildNode.tagName == strXMLLink) {
  14948.                     strLink = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  14949.                 }
  14950.                 else if (XMLChildNode.tagName == strXMLLanguage) {
  14951.                     strLanguage = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  14952.                 }
  14953.                 else if (XMLChildNode.tagName == strXMLStared) {
  14954.                     strStared = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  14955.  
  14956.                     bIsStared = strStared == EBFeedXMLConsts_CT2384137.TRUE
  14957.                                                 ?
  14958.                                                 true
  14959.                                                 :
  14960.                                                 false;
  14961.                 }
  14962.             }
  14963.  
  14964.             oFeedDataData = new EBFeedDataData_CT2384137(strTitle, strLink, bIsStared, strLanguage);
  14965.         }
  14966.  
  14967.         return oFeedDataData;
  14968.     },
  14969.  
  14970.     XMLToFeedItemArrayHashData: function(XMLNode) {
  14971.         var oFeedItemArrayHashData = null;
  14972.  
  14973.  
  14974.         var strXMLItems = EBFeedXMLConsts_CT2384137.ITEMS;
  14975.  
  14976.         //get the correct root node (depends in this is the xml document or a regular dom node)
  14977.         var XMLRoot = XMLNode.ownerDocument ? XMLNode : XMLNode.documentElement;
  14978.         var XMLChildNode = null;
  14979.  
  14980.         if (XMLRoot.tagName == strXMLItems) {
  14981.             var oFeedItemData = null;
  14982.  
  14983.             oFeedItemArrayHashData = new EBFeedItemArrayHashData_CT2384137();
  14984.             for (var i = 0; i < XMLRoot.childNodes.length; i++) {
  14985.                 XMLChildNode = XMLRoot.childNodes[i];
  14986.                 oFeedItemData = this.XMLToFeedItemData(XMLChildNode);
  14987.                 if (oFeedItemData) {
  14988.                     oFeedItemArrayHashData.ArrayHash.Add(oFeedItemData.Link, oFeedItemData);
  14989.                 }
  14990.             }
  14991.  
  14992.         }
  14993.  
  14994.         return oFeedItemArrayHashData;
  14995.     },
  14996.  
  14997.     XMLToFeedItemData: function(XMLNode) {
  14998.         var oFeedItemData = null;
  14999.  
  15000.         var strXMLItem = EBFeedXMLConsts_CT2384137.ITEM;
  15001.         var strXMLTitle = EBFeedXMLConsts_CT2384137.TITLE;
  15002.         var strXMLLink = EBFeedXMLConsts_CT2384137.LINK;
  15003.         var strXMLTooltip = EBFeedXMLConsts_CT2384137.TOOLTIP;
  15004.         var strXMLStatus = EBFeedXMLConsts_CT2384137.STATUS;
  15005.         var strXMLVisited = EBFeedXMLConsts_CT2384137.VISITED;
  15006.  
  15007.         //get the correct root node (depends in this is the xml document or a regular dom node)
  15008.         var XMLRoot = XMLNode.ownerDocument ? XMLNode : XMLNode.documentElement;
  15009.         var XMLChildNode = null;
  15010.  
  15011.         if (XMLRoot.tagName == strXMLItem) {
  15012.             var strTitle = '';
  15013.             var strLink = '';
  15014.             var strTooltip = '';
  15015.             var strStatus = '';
  15016.             var strVisited = '';
  15017.             var bVisited = false;
  15018.  
  15019.             for (var i = 0; i < XMLRoot.childNodes.length; i++) {
  15020.                 XMLChildNode = XMLRoot.childNodes[i];
  15021.                 if (XMLChildNode.tagName == strXMLTitle) {
  15022.                     strTitle = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  15023.                 }
  15024.                 else if (XMLChildNode.tagName == strXMLLink) {
  15025.                     strLink = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  15026.                 }
  15027.                 else if (XMLChildNode.tagName == strXMLTooltip) {
  15028.                     strTooltip = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  15029.                 }
  15030.                 else if (XMLChildNode.tagName == strXMLStatus) {
  15031.                     strStatus = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  15032.                 }
  15033.                 else if (XMLChildNode.tagName == strXMLVisited) {
  15034.                     strVisited = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  15035.  
  15036.                     bVisited = strVisited == EBFeedXMLConsts_CT2384137.TRUE
  15037.                                                 ?
  15038.                                                 true
  15039.                                                 :
  15040.                                                 false;
  15041.                 }
  15042.             }
  15043.  
  15044.             if (strLink) {
  15045.                 oFeedItemData = new EBFeedItemData_CT2384137(strTitle, strLink, strTooltip, strStatus, bVisited);
  15046.             }
  15047.         }
  15048.  
  15049.         return oFeedItemData;
  15050.     }
  15051. };
  15052. var EBFeedDialogConsts_CT2384137 = 
  15053. {
  15054.     Attributes : 
  15055.     {
  15056.         Link    : 'EBAttributeFeedLink',
  15057.         Index   : 'EBIndex'
  15058.     },
  15059.     
  15060.     Images :
  15061.     {
  15062.         EnvRead        : 'chrome://iobitcom/skin/feed_env_read.png',
  15063.         EnvUnread    : 'chrome://iobitcom/skin/feed_env_unread.png'
  15064.     },
  15065.     
  15066.     Style : 
  15067.     {                                    
  15068.         BoxFeedItemFixedStyle            : 'margin-left:5px;margin-right:5px;height:20px;width:220px;min-width:220px;',
  15069.         BoxFeedItemDefaultStyle            : 'border:1px solid transparent;',
  15070.         BoxFeedItemHoverStyle            : 'background-color:#C6D3EF;border:1px solid #316AC5;cursor:pointer;',
  15071.         BoxFeedItemDownStyle            : 'padding-top:2px;padding-left:2px;',
  15072.         ImageFeedItemDownStyle            : 'padding-top:1px;padding-left:1px;',
  15073.         LabelFeedItemFixedStyle            : 'font-size:11px;margin-left:1px;width:210px;min-width:210px;',
  15074.         LabelFeedItemHoverStyle            : 'cursor:pointer;',
  15075.         LabelTextUnVisitedStyleColor    : 'color:black;',
  15076.         LabelTextVisitedStyleColor        : 'color:#800080;',
  15077.         BoxLabelAlign                    : 'center'
  15078.     }
  15079. }
  15080.  
  15081. function EBFeedDialogManager_CT2384137(xulMenuPopup, oFeedComponent) {
  15082.     this.xulMenuPopup = xulMenuPopup;
  15083.     this.m_oFeedComponent = oFeedComponent;
  15084.  
  15085.     this.contextItem = null;
  15086.     this.xulContext = null;
  15087.     this.xulStack = null;
  15088.     this.xulContextWidth = null;
  15089.     this.xulContextHeight = null;
  15090.  
  15091.     this.imgComments = null;
  15092.     this.commentsFlexBox = null;
  15093.     this.imgRefresh = null;
  15094.     this.imgDelete = null;
  15095.     this.imgRead = null;
  15096.     this.imgUnread = null;
  15097.     this.lblTitle = null;
  15098.  
  15099.     this.usgDeleteItem = null;
  15100.     this.usgOpenItem = null;
  15101.     this.usgRefresh = null;
  15102.     this.usgDeleteAll = null;
  15103.     this.usgClose = null;
  15104.     this.usgOpen = null;
  15105.  
  15106.     this.initUsageObjects = function() {
  15107.         this.usgDeleteItem = EBUsageRss_CT2384137.DeleteItem;
  15108.         this.usgOpenItem = EBUsageRss_CT2384137.OpenItemLink;
  15109.         this.usgRefresh = EBUsageRss_CT2384137.Refresh;
  15110.         this.usgDeleteAll = EBUsageRss_CT2384137.DeleteAll;
  15111.         this.usgClose = EBUsageRss_CT2384137.OnRssClose;
  15112.         this.usgOpen = EBUsageRss_CT2384137.OnRssOpen;
  15113.     };
  15114.  
  15115.     this.init = function() {
  15116.         this.contextItem = null;
  15117.         this.xulContext = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "boxContext");
  15118.         this.xulStack = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "mainStack");
  15119.         this.xulContextWidth = 0;
  15120.         this.xulContextHeight = 0;
  15121.  
  15122.         this.imgComments = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "imageComments");
  15123.         this.commentsFlexBox = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "boxCommentsFlex");
  15124.         this.imgRefresh = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "imageRefresh");
  15125.         this.imgDelete = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "imageDelete");
  15126.         this.imgRead = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "imageRead");
  15127.         this.imgUnread = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "imageUnread");
  15128.         this.lblTitle = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "lblTitle");
  15129.  
  15130.         //init usage objects
  15131.         this.initUsageObjects();
  15132.  
  15133.         this.CheckForDialogRTL();
  15134.         this.ApplyLanguagePack();
  15135.         this._initUI();
  15136.         this._handleCommentsLink();
  15137.  
  15138.         //send usage if not multifeed dialog
  15139.         if (!this.m_oFeedComponent.IsMultiFeed || 
  15140.             (typeof this.m_oFeedComponent.IsSingle != "undefined" && this.m_oFeedComponent.IsSingle))
  15141.             this.usgOpen();
  15142.  
  15143.         this.LoadDialogData();
  15144.     };
  15145.  
  15146.     this.reload = function(newFeedComponent) {
  15147.         newFeedComponent.ContainerScrollTop = 0;
  15148.         this.m_oFeedComponent = newFeedComponent;
  15149.         this.LoadDialogData();
  15150.     };
  15151.  
  15152.     this._initUI = function() {
  15153.         //init image buttons
  15154.         if (this.imgComments)
  15155.             EBUILogic_ImageButtons_CT2384137.setManager(this.imgComments);
  15156.  
  15157.         if (this.imgRefresh)
  15158.             EBUILogic_ImageButtons_CT2384137.setManager(this.imgRefresh);
  15159.  
  15160.         if (this.imgDelete)
  15161.             EBUILogic_ImageButtons_CT2384137.setManager(this.imgDelete);
  15162.  
  15163.         if (this.imgRead)
  15164.             EBUILogic_ImageButtons_CT2384137.setManager(this.imgRead);
  15165.  
  15166.         if (this.imgUnread)
  15167.             EBUILogic_ImageButtons_CT2384137.setManager(this.imgUnread);
  15168.  
  15169.         //init onclick actions
  15170.         var manager = this;
  15171.         if (this.imgRefresh)
  15172.             this.imgRefresh.onclick = function(e) { if (!this.manager.isDisabled) manager.OnClickRefresh(e); };
  15173.  
  15174.         if (this.imgDelete)
  15175.             this.imgDelete.onclick = function(e) { if (!this.manager.isDisabled) manager.OnClickDeleteAll(e); };
  15176.  
  15177.         if (this.imgRead)
  15178.             this.imgRead.onclick = function(e) { if (!this.manager.isDisabled) manager.OnClickMarkRead(e); };
  15179.  
  15180.         if (this.imgUnread)
  15181.             this.imgUnread.onclick = function(e) { if (!this.manager.isDisabled) manager.OnClickMarkUnRead(e); };
  15182.  
  15183.         if (this.lblTitle)
  15184.             this.lblTitle.onclick = function(e) { manager.OnClickLabelTitle(e); };
  15185.  
  15186.         //hide context delete message button if live mode
  15187.         var xulDeleteItem = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "contextDelete");
  15188.         if (this.m_oFeedComponent.IsLiveMode)
  15189.             xulDeleteItem.style.display = "none";
  15190.  
  15191.         this.xulContext.style.display = "none";
  15192.     };
  15193.  
  15194.     this._handleCommentsLink = function() {
  15195.         var strCommentsLink = this.m_oFeedComponent.ComponentItem.Comments;
  15196.         var manager = this;
  15197.  
  15198.         //show comments link button
  15199.         if (this.imgComments) {
  15200.             if (strCommentsLink) {
  15201.                 this.imgComments.style.display = "";
  15202.                 this.commentsFlexBox.style.display = "";
  15203.                 this.imgComments.onclick = function(e) { manager.OnClickComments(e, strCommentsLink); };
  15204.             }
  15205.             //hide comment link button
  15206.             else {
  15207.                 this.imgComments.style.display = "none";
  15208.                 this.commentsFlexBox.style.display = "none";
  15209.             }
  15210.         }
  15211.     };
  15212.  
  15213.     this.CheckForDialogRTL = function() {
  15214.         var isUserAgentRtl = EBGlobalManager_CT2384137.IsUserAgentRtl();
  15215.         var isFeedRtl = EBGlobalManager_CT2384137.IsLanguageRtl(this.m_oFeedComponent.FeedData.Data.Language);
  15216.         var direction = (isFeedRtl) ? 'rtl' : 'ltr';
  15217.  
  15218.         //adjust text direction and alignment
  15219.         EBFeedDialogConsts_CT2384137.Style.BoxFeedItemFixedStyle += 'direction: ' + direction + ';text-align:left;';
  15220.  
  15221.         var boxMain = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "boxMain");
  15222.  
  15223.         //adjust background
  15224.         if (isFeedRtl)
  15225.             this.xulMenuPopup.style.textAlign = "right";
  15226.         //else
  15227.         //    boxMain.className = "eb-feed";
  15228.     };
  15229.  
  15230.     this.LoadDialogData = function() {
  15231.         this.LoadHeaderData();
  15232.         if (!this.m_oFeedComponent.IsLiveMode)
  15233.             this.LoadFeedItemsData();
  15234.         else
  15235.             this.LoadLiveFeedItemsData();
  15236.     };
  15237.  
  15238.     this.LoadHeaderData = function() {
  15239.         var strFeedTitle = this.m_oFeedComponent.FeedData.Data.Title;
  15240.         strFeedTitle = EBXML_CT2384137.FromLegalXml(strFeedTitle);
  15241.         this.lblTitle.setAttribute('value', strFeedTitle);
  15242.     };
  15243.  
  15244.     this.OnClickComments = function(event, strCommentsLink) {
  15245.         this.NavigateToURL(event, strCommentsLink);
  15246.     };
  15247.  
  15248.     this.OnClickLabelTitle = function(event) {
  15249.         var strFeedLink = this.m_oFeedComponent.FeedData.Data.Link;
  15250.         this.NavigateToURL(event, strFeedLink);
  15251.     };
  15252.  
  15253.     this.NullifyFeedItemsContainer = function() {
  15254.         var oContainer = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'rowsItems');
  15255.  
  15256.         while (oContainer.childNodes.length > 0)
  15257.             oContainer.removeChild(oContainer.firstChild);
  15258.     };
  15259.  
  15260.     this.LoadFeedItemsData = function() {
  15261.         this.NullifyFeedItemsContainer();
  15262.  
  15263.         this.m_oFeedComponent.NumOfNew = 0;
  15264.  
  15265.         var oHistoryItemDataArrayHash = this.m_oFeedComponent.HistoryData.ArrayHash;
  15266.  
  15267.         var oFeedItemDataArrayHash = this.m_oFeedComponent.FeedData.Items.ArrayHash;
  15268.         var oFeedItemData = null;
  15269.         var strHashKey = '';
  15270.         var iCount = oFeedItemDataArrayHash.Count();
  15271.         for (var i = 0; i < iCount; i++) {
  15272.             oFeedItemData = oFeedItemDataArrayHash.GetByIndex(i);
  15273.             strHashKey = oFeedItemData.Link;
  15274.  
  15275.             //only if it's not in the history loads it
  15276.             if (!oHistoryItemDataArrayHash.Contains(strHashKey)) {
  15277.                 if (oFeedItemData.Status == EBFeedXMLConsts_CT2384137.UNREAD)
  15278.                     this.m_oFeedComponent.NumOfNew++;
  15279.  
  15280.                 this.LoadFeedItemData(oFeedItemData, i);
  15281.             }
  15282.         }
  15283.  
  15284.         this.updateActionButtons();
  15285.  
  15286.         //set the scroll top
  15287.         document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'divContainer').scrollTop = this.m_oFeedComponent.ContainerScrollTop;
  15288.     };
  15289.  
  15290.     this.updateActionButtons = function() {
  15291.         var iCount = this.m_oFeedComponent.FeedData.Items.ArrayHash.Count();
  15292.         //Enable/Disbale action buttons
  15293.         if (this.m_oFeedComponent.NumOfNew == 0 && this.imgRead)
  15294.             this.imgRead.manager.disable();
  15295.  
  15296.         if (iCount == 0) {
  15297.             if (this.imgDelete) this.imgDelete.manager.disable();
  15298.             if (this.imgRead) this.imgRead.manager.disable();
  15299.             if (this.imgUnread) this.imgUnread.manager.disable();
  15300.  
  15301.         }
  15302.         else if (iCount == this.m_oFeedComponent.NumOfNew) {
  15303.             if (this.imgDelete) this.imgDelete.manager.enable();
  15304.             if (this.imgRead) this.imgRead.manager.enable();
  15305.             if (this.imgUnread) this.imgUnread.manager.disable();
  15306.  
  15307.         }
  15308.         else {
  15309.             if (this.imgDelete) this.imgDelete.manager.enable();
  15310.             if (this.imgRead) this.imgRead.manager.enable();
  15311.             if (this.imgUnread) this.imgUnread.manager.enable();
  15312.         }
  15313.     };
  15314.  
  15315.     this.LoadLiveFeedItemsData = function() {
  15316.         this.NullifyFeedItemsContainer();
  15317.  
  15318.         this.m_oFeedComponent.NumOfNew = 0;
  15319.         var oFeedItemDataArrayHash = this.m_oFeedComponent.FeedData.Items.ArrayHash;
  15320.         var oFeedItemData = null;
  15321.         var strHashKey = '';
  15322.         var iCount = oFeedItemDataArrayHash.Count();
  15323.         for (var i = 0; i < iCount; i++) {
  15324.             oFeedItemData = oFeedItemDataArrayHash.GetByIndex(i);
  15325.             this.LoadFeedItemData(oFeedItemData, i);
  15326.         }
  15327.  
  15328.         //Hide Buttons
  15329.         document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "eb-feed-icons").style.display = 'none';
  15330.         //set the scroll top
  15331.         document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'divContainer').scrollTop = this.m_oFeedComponent.ContainerScrollTop;
  15332.     };
  15333.  
  15334.     this.LoadFeedItemData = function(oFeedItemData, iIndex) {
  15335.         var strTitle = oFeedItemData.Title;
  15336.         var strLink = oFeedItemData.Link;
  15337.         var strTooltip = oFeedItemData.Tooltip;
  15338.         var strStatus = oFeedItemData.Status;
  15339.         var bVisited = oFeedItemData.Visited;
  15340.         var manager = this;
  15341.  
  15342.         var oEnvImage = document.createElement('image');
  15343.         var strImage = '';
  15344.  
  15345.         if (strStatus == EBFeedXMLConsts_CT2384137.READ)
  15346.             strImage = EBFeedDialogConsts_CT2384137.Images.EnvRead;
  15347.         else
  15348.             strImage = EBFeedDialogConsts_CT2384137.Images.EnvUnread;
  15349.  
  15350.         var strLabelTextStyleColor = '';
  15351.         if (bVisited)
  15352.             strLabelTextStyleColor = EBFeedDialogConsts_CT2384137.Style.LabelTextVisitedStyleColor;
  15353.         else
  15354.             strLabelTextStyleColor = EBFeedDialogConsts_CT2384137.Style.LabelTextUnVisitedStyleColor;
  15355.  
  15356.         oEnvImage.setAttribute('src', strImage);
  15357.         oEnvImage.setAttribute('width', '24');
  15358.         oEnvImage.setAttribute('height', '16');
  15359.  
  15360.         var oBoxLabel = document.createElement('box');
  15361.         oBoxLabel.setAttribute('align', EBFeedDialogConsts_CT2384137.Style.BoxLabelAlign);
  15362.         oBoxLabel.setAttribute('style', EBFeedDialogConsts_CT2384137.Style.BoxFeedItemFixedStyle + EBFeedDialogConsts_CT2384137.Style.BoxFeedItemDefaultStyle);
  15363.         oBoxLabel.onmouseover = function(e) { manager.OnMouseOverBoxFeedItem(e, this); };
  15364.         oBoxLabel.onmouseout = function(e) { manager.OnMouseOutBoxFeedItem(e, this); };
  15365.         oBoxLabel.onmousedown = function(e) { manager.OnMouseDownBoxFeedItem(e, this); };
  15366.         oBoxLabel.onmouseup = function(e) { manager.OnMouseUpBoxFeedItem(e, this); };
  15367.         oBoxLabel.onclick = function(e) { manager.OnClickBoxFeedItem(e, this); };
  15368.         //add link special attribute
  15369.         oBoxLabel.setAttribute(EBFeedDialogConsts_CT2384137.Attributes.Link, strLink);
  15370.         //add index special attribute
  15371.         oBoxLabel.setAttribute(EBFeedDialogConsts_CT2384137.Attributes.Index, iIndex);
  15372.         
  15373.         var oLabel = document.createElement('label');
  15374.         strTitle = EBXML_CT2384137.FromLegalXml(strTitle);
  15375.         oLabel.setAttribute('value', EBGlobalManager_CT2384137.htmlDecode(strTitle));
  15376.         oLabel.setAttribute('name', 'feedTitle');
  15377.  
  15378.         if (EBGlobalManager_CT2384137.IsFirefox3())
  15379.             oLabel.setAttribute('tooltiptext', strTooltip);
  15380.  
  15381.         oLabel.setAttribute('style', EBFeedDialogConsts_CT2384137.Style.LabelFeedItemFixedStyle + strLabelTextStyleColor);
  15382.         oLabel.onmouseover = function(e) { manager.OnMouseOverLabelFeedItem(e, this, strLabelTextStyleColor); };
  15383.         oLabel.onmouseout = function(e) { manager.OnMouseOutLabelFeedItem(e, this, strLabelTextStyleColor); };
  15384.         oBoxLabel.appendChild(oLabel);
  15385.  
  15386.         //create the hbox container:
  15387.         var oRow = document.createElement('hbox');
  15388.         oRow.setAttribute('align', 'center');
  15389.         oRow.setAttribute('height', '20');
  15390.  
  15391.         //add the elements to the hbox
  15392.         oRow.appendChild(oEnvImage);
  15393.         oRow.appendChild(oBoxLabel);
  15394.  
  15395.         //add to the main container
  15396.         var oRowsItems = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'rowsItems');
  15397.         oRowsItems.appendChild(oRow);
  15398.  
  15399.         if (this.m_oFeedComponent.IsLiveMode)
  15400.             oEnvImage.style.visibility = 'hidden';
  15401.     };
  15402.  
  15403.     this.OnCommandDeleteMessage = function(event) {
  15404.         //find the element associated with the popup menu:
  15405.         var oElement = this.contextItem;
  15406.         var oBoxLabel = null;
  15407.         var oRow = null;
  15408.  
  15409.         if (oElement.tagName == 'label')
  15410.             oBoxLabel = oElement.parentNode;
  15411.         else
  15412.             oBoxLabel = oElement;
  15413.  
  15414.         var strLink = oBoxLabel.getAttribute(EBFeedDialogConsts_CT2384137.Attributes.Link);
  15415.  
  15416.         var oFeedItemDataArrayHash = this.m_oFeedComponent.FeedData.Items.ArrayHash;
  15417.         //check to update num of new
  15418.         var oFeedItemData = oFeedItemDataArrayHash.GetByID(strLink);
  15419.         if (oFeedItemData) {
  15420.             if (oFeedItemData.Status == EBFeedXMLConsts_CT2384137.UNREAD)
  15421.                 this.m_oFeedComponent.NumOfNew--;
  15422.  
  15423.             var iIndex = oFeedItemDataArrayHash.GetIndexByObjectValue(oFeedItemData);
  15424.  
  15425.             //remove it from feed data
  15426.             oFeedItemDataArrayHash.Remove(iIndex, strLink);
  15427.  
  15428.             //add it to the history data:
  15429.             var oHistoryItemDataArrayHash = this.m_oFeedComponent.HistoryData.ArrayHash;
  15430.             var oHistoryItemData = new EBHistoryItemData_CT2384137(strLink);
  15431.             oHistoryItemDataArrayHash.Add(oHistoryItemData.Link, oHistoryItemData);
  15432.  
  15433.             //remove the element from the main rows
  15434.             oRow = oBoxLabel.parentNode;
  15435.             var oContainer = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'rowsItems');
  15436.             oContainer.removeChild(oRow);
  15437.  
  15438.             //update multi feed menu
  15439.             this.UpdateMultiFeedMenu();
  15440.  
  15441.             //save the data to the files
  15442.             this.SaveDataAndUpdate();
  15443.         }
  15444.  
  15445.         var strAncestorId = this.m_oFeedComponent.MultiFeedCompID;
  15446.         var strCompId = this.m_oFeedComponent.ComponentItem.UniqueCompID;
  15447.         var strCompType = this.m_oFeedComponent.ComponentItem.CompType;
  15448.         this.usgDeleteItem(strAncestorId, strCompId, strCompType);
  15449.         this.updateActionButtons();
  15450.     };
  15451.  
  15452.     this.sendMenuItemClickUsage = function(strLink, iIndex, oBoxLabel, bIsNewTab, bIsNewWindow) {
  15453.         var strAncestorId = this.m_oFeedComponent.MultiFeedCompID;
  15454.         var strCompId = this.m_oFeedComponent.ComponentItem.UniqueCompID;
  15455.         var iCount = this.m_oFeedComponent.FeedData.Items.ArrayHash.Count();
  15456.         var strCompType = this.m_oFeedComponent.ComponentItem.CompType;
  15457.         //for twitter
  15458.         var twitterUserId = (this.m_oFeedComponent.ComponentItem.userId) ? this.m_oFeedComponent.ComponentItem.userId : "";
  15459.         var userScreenName = (this.m_oFeedComponent.ComponentItem.screenName) ? this.m_oFeedComponent.ComponentItem.screenName : "";
  15460.  
  15461.         this.usgOpenItem(strAncestorId, strCompId, this.m_oFeedComponent.ComponentItem.FeedURL, strLink, bIsNewWindow, bIsNewTab, iIndex, iCount, strCompType, twitterUserId, userScreenName);
  15462.     };
  15463.  
  15464.     this.OnCommandShowInNewWindow = function(event, bIsTab) {
  15465.         //find the element associated with the popup menu:
  15466.         var oElement = this.contextItem;
  15467.         var oBoxLabel = null;
  15468.         var oRow = null;
  15469.  
  15470.         if (oElement.tagName == 'label')
  15471.             oBoxLabel = oElement.parentNode;
  15472.         else
  15473.             oBoxLabel = oElement;
  15474.  
  15475.         var strLink = oBoxLabel.getAttribute(EBFeedDialogConsts_CT2384137.Attributes.Link);
  15476.         var iIndex = oBoxLabel.getAttribute(EBFeedDialogConsts_CT2384137.Attributes.Index);
  15477.         var oFeedItemDataArrayHash = this.m_oFeedComponent.FeedData.Items.ArrayHash;
  15478.         var oFeedItemData = oFeedItemDataArrayHash.GetByID(strLink);
  15479.  
  15480.         //set not stared:
  15481.         this.setNotStarred();
  15482.  
  15483.         //update read status and number of unread
  15484.         if (oFeedItemData.Status == EBFeedXMLConsts_CT2384137.UNREAD) {
  15485.             //update the num of new
  15486.             if (!this.m_oFeedComponent.IsLiveMode)
  15487.                 this.m_oFeedComponent.NumOfNew--;
  15488.  
  15489.             oFeedItemData.Status = EBFeedXMLConsts_CT2384137.READ;
  15490.         }
  15491.  
  15492.         oFeedItemData.Visited = true;
  15493.  
  15494.         this.SaveDataAndUpdate();
  15495.  
  15496.         //usage
  15497.         this.sendMenuItemClickUsage(strLink, iIndex, oBoxLabel, bIsTab, !bIsTab);
  15498.         
  15499.         strLink = EBXML_CT2384137.FromLegalXml(strLink);
  15500.  
  15501.         if (bIsTab)
  15502.             EBWeb_CT2384137.LoadURLInNewTab(oFeedItemData.Link);
  15503.         else
  15504.             oWindow = EBWeb_CT2384137.LoadURLInNewWindow(oFeedItemData.Link);
  15505.  
  15506.         EBFeedUIManager_CT2384137.closeFeed(this.xulMenuPopup);
  15507.     };
  15508.  
  15509.     this.SetFeedItemsImages = function(strStatus) {
  15510.         var strImage = '';
  15511.  
  15512.         if (strStatus == EBFeedXMLConsts_CT2384137.READ)
  15513.             strImage = EBFeedDialogConsts_CT2384137.Images.EnvRead;
  15514.         else
  15515.             strImage = EBFeedDialogConsts_CT2384137.Images.EnvUnread;
  15516.  
  15517.         var oContainer = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'rowsItems');
  15518.         var oImages = oContainer.getElementsByTagName('image');
  15519.         var oImage = null;
  15520.  
  15521.         for (var i = 0; i < oImages.length; i++) {
  15522.             oImage = oImages[i];
  15523.             oImage.setAttribute('src', strImage);
  15524.         }
  15525.     };
  15526.  
  15527.     this.OnClickBoxFeedItem = function(event, oElement) {
  15528.         //right click
  15529.         if (event.button == 2) this.openContextBox(event);
  15530.  
  15531.         //left or middle click
  15532.         else if (event.button != 2) {
  15533.             //get the special attribute to recieve this item from the hash
  15534.             var strLinkHashKey = oElement.getAttribute(EBFeedDialogConsts_CT2384137.Attributes.Link);
  15535.             var iIndex = oElement.getAttribute(EBFeedDialogConsts_CT2384137.Attributes.Index);
  15536.             var oFeedItemData = this.m_oFeedComponent.FeedData.Items.ArrayHash.GetByID(strLinkHashKey);
  15537.  
  15538.             if (oFeedItemData) {
  15539.                 //set not stared:
  15540.                 this.setNotStarred();
  15541.  
  15542.                 if (oFeedItemData.Status == EBFeedXMLConsts_CT2384137.UNREAD) {
  15543.                     //update the num of new
  15544.                     if (!this.m_oFeedComponent.IsLiveMode)
  15545.                         this.m_oFeedComponent.NumOfNew--;
  15546.  
  15547.                     oFeedItemData.Status = EBFeedXMLConsts_CT2384137.READ;
  15548.                 }
  15549.  
  15550.                 oFeedItemData.Visited = true;
  15551.  
  15552.                 this.SaveDataAndUpdate();
  15553.  
  15554.                 //send usage
  15555.                 this.sendMenuItemClickUsage(strLinkHashKey, iIndex, event.target, event.button == 1, false);
  15556.  
  15557.                 this.NavigateToURL(event, oFeedItemData.Link);
  15558.             }
  15559.         }
  15560.     };
  15561.  
  15562.     this.openContextBox = function(event) {
  15563.         this.xulContext.style.display = "";
  15564.  
  15565.         var xulOpenInNewTab = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "contextNewTab"); //this.xulContext.childNodes[1].firstChild;
  15566.         var xulOpenInNewWindow = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "contextNewWindow"); //this.xulContext.childNodes[1].childNodes[1];
  15567.         var xulDeleteItem = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "contextDelete"); //this.xulContext.childNodes[1].childNodes[2];
  15568.         var manager = this;
  15569.  
  15570.         //set manually the item associated with the context
  15571.         this.contextItem = event.currentTarget;
  15572.  
  15573.         //FF 3+
  15574.         if (EBGlobalManager_CT2384137.IsFirefox3()) {
  15575.             var mouseX = event.layerX;
  15576.             var mouseY = event.layerY;
  15577.  
  15578.             var iScroll = parseInt(document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'divContainer').scrollTop);
  15579.             mouseY -= iScroll;
  15580.  
  15581.             //lazy calculation of xulContext width
  15582.             if (!this.xulContextWidth) this.xulContextWidth = this.xulContext.boxObject.width;
  15583.             if (!this.xulContextHeight) this.xulContextHeight = this.xulContext.boxObject.height;
  15584.  
  15585.             if (mouseX + this.xulContextWidth > this.xulStack.boxObject.width)
  15586.                 mouseX = this.xulStack.boxObject.width - this.xulContextWidth - 10;
  15587.  
  15588.             if (mouseY + this.xulContextHeight > this.xulStack.boxObject.height)
  15589.                 mouseY = this.xulStack.boxObject.height - this.xulContextHeight;
  15590.  
  15591.             this.xulContext.setAttribute("top", mouseY);
  15592.             this.xulContext.setAttribute("left", mouseX);
  15593.         }
  15594.         //FF 2-
  15595.         else {
  15596.             var xulRows = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "rowsItems");
  15597.             xulRows.insertBefore(this.xulContext, event.currentTarget.parentNode.nextSibling);
  15598.         }
  15599.     };
  15600.  
  15601.     this.NavigateToURL = function(event, strURL) {
  15602.         strURL = EBXML_CT2384137.FromLegalXml(strURL);
  15603.         EBLinkManager_CT2384137.LoadLinkURL(event, strURL, false, null);
  15604.  
  15605.         //close feed popup / meltifeed menupopup
  15606.         EBFeedUIManager_CT2384137.closeFeed(this.xulMenuPopup);
  15607.     };
  15608.  
  15609.     this.OnMouseOverLabelFeedItem = function(event, oElement, strLabelTextStyleColor) {
  15610.         var strStyle = EBFeedDialogConsts_CT2384137.Style.LabelFeedItemFixedStyle + strLabelTextStyleColor
  15611.                         +
  15612.                     EBFeedDialogConsts_CT2384137.Style.LabelFeedItemHoverStyle;
  15613.         oElement.setAttribute('style', strStyle);
  15614.     };
  15615.  
  15616.     this.OnMouseOutLabelFeedItem = function(event, oElement, strLabelTextStyleColor) {
  15617.         var strStyle = EBFeedDialogConsts_CT2384137.Style.LabelFeedItemFixedStyle + strLabelTextStyleColor;
  15618.         oElement.setAttribute('style', strStyle);
  15619.     };
  15620.  
  15621.     this.OnMouseOverBoxFeedItem = function(event, oElement) {
  15622.         var strStyle = EBFeedDialogConsts_CT2384137.Style.BoxFeedItemFixedStyle
  15623.                         +
  15624.                     EBFeedDialogConsts_CT2384137.Style.BoxFeedItemHoverStyle;
  15625.         oElement.setAttribute('style', strStyle);
  15626.  
  15627.         if (this.contextItem && this.contextItem.getAttribute(EBFeedDialogConsts_CT2384137.Attributes.Index)
  15628.             != oElement.getAttribute(EBFeedDialogConsts_CT2384137.Attributes.Index))
  15629.             this.xulContext.style.display = "none";
  15630.     };
  15631.  
  15632.     this.OnMouseOutBoxFeedItem = function(event, oElement) {
  15633.         var strStyle = EBFeedDialogConsts_CT2384137.Style.BoxFeedItemFixedStyle
  15634.                         +
  15635.                     EBFeedDialogConsts_CT2384137.Style.BoxFeedItemDefaultStyle;
  15636.  
  15637.         //clear the image style
  15638.         if (!this.m_oFeedComponent.IsLiveMode)
  15639.             oElement.parentNode.firstChild.setAttribute('style', '');
  15640.  
  15641.         oElement.setAttribute('style', strStyle);
  15642.     };
  15643.  
  15644.     this.OnMouseDownBoxFeedItem = function(event, oElement) {
  15645.         if (event.button == 0) {
  15646.             var strStyle = EBFeedDialogConsts_CT2384137.Style.BoxFeedItemFixedStyle
  15647.                             +
  15648.                         EBFeedDialogConsts_CT2384137.Style.BoxFeedItemHoverStyle
  15649.                             +
  15650.                         EBFeedDialogConsts_CT2384137.Style.BoxFeedItemDownStyle;
  15651.  
  15652.             //set the image to be click style as well
  15653.             if (!this.m_oFeedComponent.IsLiveMode) {
  15654.                 oElement.parentNode.firstChild.setAttribute('style', EBFeedDialogConsts_CT2384137.Style.ImageFeedItemDownStyle);
  15655.             }
  15656.             oElement.setAttribute('style', strStyle);
  15657.         }
  15658.     };
  15659.  
  15660.     this.OnMouseUpBoxFeedItem = function(event, oElement) {
  15661.         if (event.button == 0) {
  15662.             var strStyle = EBFeedDialogConsts_CT2384137.Style.BoxFeedItemFixedStyle
  15663.                             +
  15664.                         EBFeedDialogConsts_CT2384137.Style.BoxFeedItemHoverStyle;
  15665.  
  15666.             //clear the image style
  15667.             oElement.parentNode.firstChild.setAttribute('style', '');
  15668.             oElement.setAttribute('style', strStyle);
  15669.         }
  15670.     };
  15671.  
  15672.     this.OnClickRefresh = function(event) {
  15673.         EBFeedPreferencesManager_CT2384137.NullifyFeedPollDate(this.m_oFeedComponent);
  15674.         EBFeedManager_CT2384137.CheckServerRequest(this.m_oFeedComponent);
  15675.  
  15676.         //usage
  15677.         var strAncestorId = this.m_oFeedComponent.MultiFeedCompID;
  15678.         var strCompId = this.m_oFeedComponent.ComponentItem.UniqueCompID;
  15679.         var strCompType = this.m_oFeedComponent.ComponentItem.CompType;
  15680.         this.usgRefresh(strAncestorId, strCompId, strCompType);
  15681.     };
  15682.  
  15683.     this.OnAcceptConfirmDialog = function(event) {
  15684.         oInput.value = true;
  15685.     };
  15686.  
  15687.     this.OnClickDeleteAll = function(event) {
  15688.         //usage
  15689.         var strAncestorId = this.m_oFeedComponent.MultiFeedCompID;
  15690.         var strCompId = this.m_oFeedComponent.ComponentItem.UniqueCompID;
  15691.         var strCompType = this.m_oFeedComponent.ComponentItem.CompType;
  15692.         this.usgDeleteAll(strAncestorId, strCompId, strCompType);
  15693.  
  15694.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale);
  15695.         var strTitle = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_DELETE_ALL_ITEMS_TITLE');
  15696.         var strText = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_DELETE_ALL_ITEMS_MESSAGE');
  15697.         var strCheckboxText = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_DELETE_ALL_ITEMS_DONT_ASK_AGAIN');
  15698.         var checkboxValue = { "value": false };
  15699.         var isDelete = EBGlobalPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.FeedDeleteDontAskAgain);
  15700.         var bClearFeed = true;
  15701.  
  15702.         if (!isDelete) {
  15703.             bClearFeed = false;
  15704.             EBFeedUIManager_CT2384137.closeFeed(this.xulMenuPopup);
  15705.             isDelete = EBGlobalManager_CT2384137.ConfirmCheck(window, strTitle, strText, strCheckboxText, checkboxValue);
  15706.         }
  15707.  
  15708.         if (isDelete) {
  15709.             this._DeleteAll(event, bClearFeed);
  15710.             if (checkboxValue.value)
  15711.                 EBGlobalPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.FeedDeleteDontAskAgain, true);
  15712.         }
  15713.     };
  15714.  
  15715.     this._DeleteAll = function(event, bClearFeed) {
  15716.         //add all items in structured data to the history data:                                
  15717.         var oHistoryItemDataArrayHash = this.m_oFeedComponent.HistoryData.ArrayHash;
  15718.         var oHistoryItemData = null;
  15719.  
  15720.         var oFeedItemDataArrayHash = this.m_oFeedComponent.FeedData.Items.ArrayHash;
  15721.         var oFeedItemData = null;
  15722.         var iCount = oFeedItemDataArrayHash.Count();
  15723.         var strLink = '';
  15724.         for (var i = 0; i < iCount; i++) {
  15725.             oFeedItemData = oFeedItemDataArrayHash.GetByIndex(i);
  15726.             strLink = oFeedItemData.Link;
  15727.             if (!oHistoryItemDataArrayHash.Contains(strLink)) {
  15728.                 oHistoryItemData = new EBHistoryItemData_CT2384137(strLink);
  15729.                 oHistoryItemDataArrayHash.Add(oHistoryItemData.Link, oHistoryItemData);
  15730.             }
  15731.         }
  15732.         //clear the feed items hash array
  15733.         oFeedItemDataArrayHash.Clear();
  15734.         this.setNotStarred();
  15735.         this.m_oFeedComponent.NumOfNew = 0;
  15736.  
  15737.         this.SaveDataAndUpdate();
  15738.         if (bClearFeed)
  15739.             this.reload(this.m_oFeedComponent);
  15740.     };
  15741.  
  15742.     this.OnClickMarkRead = function(event) {
  15743.         //set all images read
  15744.         this.SetFeedItemsImages(EBFeedXMLConsts_CT2384137.READ);
  15745.  
  15746.         //set data
  15747.         var oHistoryItemDataArrayHash = this.m_oFeedComponent.HistoryData.ArrayHash;
  15748.         var oFeedItemDataArrayHash = this.m_oFeedComponent.FeedData.Items.ArrayHash;
  15749.         var oFeedItemData = null;
  15750.         var iCount = oFeedItemDataArrayHash.Count();
  15751.         for (var i = 0; i < iCount; i++) {
  15752.             oFeedItemData = oFeedItemDataArrayHash.GetByIndex(i);
  15753.             if (!oHistoryItemDataArrayHash.Contains(oFeedItemData.Link))
  15754.                 oFeedItemData.Status = EBFeedXMLConsts_CT2384137.READ;
  15755.         }
  15756.  
  15757.         this.m_oFeedComponent.NumOfNew = 0;
  15758.         this.setNotStarred();
  15759.  
  15760.         if (this.imgRead)
  15761.             this.imgRead.manager.disable();
  15762.             
  15763.         if (this.imgUnread)
  15764.             this.imgUnread.manager.enable();
  15765.  
  15766.         //usage
  15767.         var strAncestorId = this.m_oFeedComponent.MultiFeedCompID;
  15768.         var strCompId = this.m_oFeedComponent.ComponentItem.UniqueCompID;
  15769.         var strCompType = this.m_oFeedComponent.ComponentItem.CompType;
  15770.         EBUsageRss_CT2384137.MarkAllRead(strAncestorId, strCompId, strCompType);
  15771.  
  15772.         this.SaveDataAndUpdate();
  15773.     };
  15774.  
  15775.     this.OnClickMarkUnRead = function(event) {
  15776.         //set all images unread
  15777.         this.SetFeedItemsImages(EBFeedXMLConsts_CT2384137.UNREAD);
  15778.  
  15779.         //set data
  15780.         this.m_oFeedComponent.NumOfNew = 0;
  15781.         var oHistoryItemDataArrayHash = this.m_oFeedComponent.HistoryData.ArrayHash;
  15782.         var oFeedItemDataArrayHash = this.m_oFeedComponent.FeedData.Items.ArrayHash;
  15783.         var oFeedItemData = null;
  15784.         var iCount = oFeedItemDataArrayHash.Count();
  15785.         for (var i = 0; i < iCount; i++) {
  15786.             oFeedItemData = oFeedItemDataArrayHash.GetByIndex(i);
  15787.             if (!oHistoryItemDataArrayHash.Contains(oFeedItemData.Link)) {
  15788.                 this.m_oFeedComponent.NumOfNew++;
  15789.                 oFeedItemData.Status = EBFeedXMLConsts_CT2384137.UNREAD;
  15790.             }
  15791.         }
  15792.  
  15793.         if (this.imgUnread)
  15794.             this.imgUnread.manager.disable();
  15795.  
  15796.         if (this.imgRead)
  15797.             this.imgRead.manager.enable();
  15798.  
  15799.         //usage
  15800.         var strAncestorId = this.m_oFeedComponent.MultiFeedCompID;
  15801.         var strCompId = this.m_oFeedComponent.ComponentItem.UniqueCompID;
  15802.         var strCompType = this.m_oFeedComponent.ComponentItem.CompType;
  15803.         EBUsageRss_CT2384137.MarkAllUnRead(strAncestorId, strCompId, strCompType);
  15804.  
  15805.         this.SaveDataAndUpdate();
  15806.     };
  15807.  
  15808.     this.OnUnLoadDialog = function(event) {
  15809.         try {
  15810.             this.xulContext.style.display = "none";
  15811.  
  15812.             if (this.xulContext.parentNode.id != this.xulStack.id)
  15813.                 this.xulStack.appendChild(this.xulContext);
  15814.  
  15815.             //save the scroll top
  15816.             this.m_oFeedComponent.ContainerScrollTop = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", 'divContainer').scrollTop;
  15817.  
  15818.             //set the starred to false
  15819.             this.setNotStarred();
  15820.  
  15821.             //empty container
  15822.             this.NullifyFeedItemsContainer();
  15823.  
  15824.             //save the data to the files
  15825.             this.SaveDataAndUpdate();
  15826.  
  15827.             //usage
  15828.             var strAncestorId = this.m_oFeedComponent.MultiFeedCompID;
  15829.             var strCompId = this.m_oFeedComponent.ComponentItem.UniqueCompID;
  15830.             var strFeedUrl = this.m_oFeedComponent.ComponentItem.FeedURL
  15831.             var strCompType = this.m_oFeedComponent.ComponentItem.CompType;
  15832.             this.usgClose(strAncestorId, strCompId, strFeedUrl, strCompType);
  15833.         }
  15834.         catch (ex) {
  15835.             EBLog(ex, "Rss.OnUnLoadDialog");
  15836.         }
  15837.     };
  15838.  
  15839.     this.setNotStarred = function() {
  15840.         this.m_oFeedComponent.FeedData.Data.Stared = false;
  15841.         //update multi rss menu
  15842.         if (this.m_oFeedComponent.IsMultiFeed && !this.m_oFeedComponent.IsLiveMode)
  15843.             EBFeedUIManager_CT2384137.removeStarOnMultiRssMenu(this.xulMenuPopup, this.m_oFeedComponent.MultiFeedCompID);
  15844.     };
  15845.  
  15846.     this.SaveDataAndUpdate = function() {
  15847.         if (!this.m_oFeedComponent.IsLiveMode) {
  15848.             EBFeedManager_CT2384137.SaveFeedDataStructured(this.m_oFeedComponent);
  15849.             EBFeedManager_CT2384137.SaveFeedDataHistory(this.m_oFeedComponent);
  15850.         }
  15851.         EBFeedManager_CT2384137.notifyUpdate(this.m_oFeedComponent);
  15852.     };
  15853.  
  15854.     this.UpdateMultiFeedMenu = function() {
  15855.         if (this.m_oFeedComponent.IsMultiFeed)
  15856.             EBFeedUIManager_CT2384137.updateMultiFeedMenu(this.m_oFeedComponent.MultiFeedCompID,
  15857.                                                         this.xulMenuPopup.parentNode.parentNode,
  15858.                                                         this.m_oFeedComponent.MultiFeedChildIndex);
  15859.     };
  15860.  
  15861.     this.ApplyLanguagePack = function() {
  15862.         var xulOpenInNewTab = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "contextNewTab");
  15863.         var xulOpenInNewWindow = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "contextNewWindow");
  15864.         var xulDeleteItem = document.getAnonymousElementByAttribute(this.xulMenuPopup, "id", "contextDelete");
  15865.  
  15866.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale);
  15867.  
  15868.         if (this.imgComments)
  15869.             this.imgComments.setAttribute("tooltiptext", oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_ADD_YOUR_COMMET_TO_BOX'));
  15870.         
  15871.         if (this.imgRefresh)
  15872.             this.imgRefresh.setAttribute("tooltiptext", oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_REFRESH_TOOLTIP'));
  15873.         
  15874.         if (this.imgDelete)
  15875.             this.imgDelete.setAttribute("tooltiptext", oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_DELETE_ALL_ITEMS_TOOLTIP'));
  15876.         
  15877.         if (this.imgRead)
  15878.             this.imgRead.setAttribute("tooltiptext", oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_MARK_ALL_AS_READ_TOOLTIP'));
  15879.         
  15880.         if (this.imgUnread)
  15881.             this.imgUnread.setAttribute("tooltiptext", oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_MARK_ALL_AS_UNREAD_TOOLTIP'));
  15882.  
  15883.         xulOpenInNewTab.value = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_OPEN_IN_NEW_TAB');
  15884.         xulOpenInNewWindow.value = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_OPEN_IN_NEW_WINDOW');
  15885.         xulDeleteItem.value = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_RSS_DELETE_MESSAGE');
  15886.     };
  15887.  
  15888.     if(this.xulMenuPopup && this.m_oFeedComponent) this.init();
  15889. };
  15890. var EBFeedIOConsts_CT2384137 = 
  15891. {
  15892.     FolderName                    : 'feed',
  15893.     StructuredFileNameSuffix    : '_structured.xml',
  15894.     HistoryFileNameSuffix        : '_history.xml',
  15895.     LiveFileNameSuffix            : '_live_structured.xml'
  15896. }
  15897.  
  15898.  
  15899. var EBFeedIOManager_CT2384137 =
  15900. {
  15901.     GetLegalFeedFileNamePrefix: function(strURL) {
  15902.         var strFileNamePrefix = EBGlobalManager_CT2384137.ToLegalFileName(strURL);
  15903.         return strFileNamePrefix;
  15904.     },
  15905.  
  15906.     GetFeedFullPath: function(strFullFileName) {
  15907.         var strFeedFolder = EBFeedIOConsts_CT2384137.FolderName;
  15908.  
  15909.         var strFeedFullPath = strFeedFolder + EBDirIO_CT2384137.sep + strFullFileName;
  15910.  
  15911.         return strFeedFullPath;
  15912.     },
  15913.  
  15914.     GetFeedFile: function(strFileName) {
  15915.         var strFeedFullPath = this.GetFeedFullPath(strFileName);
  15916.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(strFeedFullPath);
  15917.  
  15918.         return oFile;
  15919.     },
  15920.  
  15921.     WriteFeedFile: function(strFileName, strContent) {
  15922.         var bSuccess = false;
  15923.         var oFile = this.GetFeedFile(strFileName);
  15924.         if (oFile) {
  15925.             bSuccess = EBFileIO_CT2384137.write(oFile, strContent, "", EBGlobalConsts_CT2384137.DefaultCharset);
  15926.         }
  15927.         return bSuccess;
  15928.     },
  15929.  
  15930.     ReadFeedFile: function(strFileName) {
  15931.         var strContent = '';
  15932.         var oFile = this.GetFeedFile(strFileName);
  15933.         if (oFile) {
  15934.             strContent = EBFileIO_CT2384137.read(oFile, EBGlobalConsts_CT2384137.DefaultCharset);
  15935.         }
  15936.  
  15937.         return strContent;
  15938.     },
  15939.  
  15940.     GetFullStructuredFileName: function(strURL) {
  15941.         var strFileNamePrefix = this.GetLegalFeedFileNamePrefix(strURL);
  15942.         var strStructuredFileName = strFileNamePrefix + EBFeedIOConsts_CT2384137.StructuredFileNameSuffix;
  15943.         return strStructuredFileName;
  15944.     },
  15945.  
  15946.     GetFullHistoryFileName: function(strURL) {
  15947.         var strFileNamePrefix = this.GetLegalFeedFileNamePrefix(strURL);
  15948.         var strHistoryFileName = strFileNamePrefix + EBFeedIOConsts_CT2384137.HistoryFileNameSuffix;
  15949.         return strHistoryFileName;
  15950.     },
  15951.  
  15952.     GetFullLiveFileName: function(strURL) {
  15953.         var strFileNamePrefix = this.GetLegalFeedFileNamePrefix(strURL);
  15954.         var strLiveFileName = strFileNamePrefix + EBFeedIOConsts_CT2384137.LiveFileNameSuffix;
  15955.         return strLiveFileName;
  15956.     },
  15957.  
  15958.     WriteStructured: function(strURL, strContent) {
  15959.         var strStructuredFileName = this.GetFullStructuredFileName(strURL);
  15960.         this.WriteFeedFile(strStructuredFileName, strContent);
  15961.     },
  15962.  
  15963.     WriteHistory: function(strURL, strContent) {
  15964.         var strHistoryFileName = this.GetFullHistoryFileName(strURL);
  15965.         this.WriteFeedFile(strHistoryFileName, strContent);
  15966.     },
  15967.  
  15968.     WriteLive: function(strURL, strContent) {
  15969.         var strLiveFileName = this.GetFullLiveFileName(strURL);
  15970.         this.WriteFeedFile(strLiveFileName, strContent);
  15971.     },
  15972.  
  15973.     ReadStructured: function(strURL) {
  15974.         var strStructuredFileName = this.GetFullStructuredFileName(strURL);
  15975.         var strContent = this.ReadFeedFile(strStructuredFileName);
  15976.         return strContent;
  15977.     },
  15978.  
  15979.     ReadHistory: function(strURL) {
  15980.         var strHistoryFileName = this.GetFullHistoryFileName(strURL);
  15981.         var strContent = this.ReadFeedFile(strHistoryFileName);
  15982.         return strContent;
  15983.     },
  15984.  
  15985.     ReadLive: function(strURL) {
  15986.         var strLiveFileName = this.GetFullLiveFileName(strURL);
  15987.         var strContent = this.ReadFeedFile(strLiveFileName);
  15988.         return strContent;
  15989.     }
  15990. }
  15991.  
  15992.  
  15993. var EBFeedPreferencesManager_CT2384137 = 
  15994. {
  15995.     GetFeedPollDateFullPrefName : function(oFeedComponent)
  15996.     {
  15997.         var strPrefName = EBPreferenceConsts_CT2384137.FeedPollDatePrefix + oFeedComponent.ComponentItem.UniqueCompID;
  15998.         return strPrefName;
  15999.     },
  16000.  
  16001.     GetFeedTTLFullPrefName: function(oFeedComponent) {
  16002.         var strPrefName = EBPreferenceConsts_CT2384137.FeedTTLPrefix + oFeedComponent.ComponentItem.UniqueCompID;
  16003.         return strPrefName;
  16004.     },
  16005.     
  16006.     GetFeedPollDate : function(oFeedComponent)
  16007.     {
  16008.         var strPrefName = this.GetFeedPollDateFullPrefName(oFeedComponent);
  16009.         var strPrefValue = EBToolbarPreferenceManager_CT2384137.GetPref(strPrefName);
  16010.         return strPrefValue;
  16011.     },
  16012.     
  16013.     SetFeedPollDate : function(oFeedComponent)
  16014.     {
  16015.         var strPrefName = this.GetFeedPollDateFullPrefName(oFeedComponent);
  16016.         var oDate = new Date();
  16017.         var strPrefValue = oDate.toString();
  16018.         EBToolbarPreferenceManager_CT2384137.SetPref(strPrefName,strPrefValue);
  16019.     },
  16020.     
  16021.     NullifyFeedPollDate : function(oFeedComponent)
  16022.     {
  16023.         var strPrefName = this.GetFeedPollDateFullPrefName(oFeedComponent);    
  16024.         EBToolbarPreferenceManager_CT2384137.SetPref(strPrefName,null);
  16025.     },
  16026.  
  16027.     FeedTTL: function(oFeedComponent, iTTL) {
  16028.         var strPrefName = this.GetFeedTTLFullPrefName(oFeedComponent);
  16029.         //get
  16030.         if (typeof iTTL == "undefined")
  16031.             return EBToolbarPreferenceManager_CT2384137.GetPref(strPrefName);
  16032.         //set
  16033.         else {
  16034.             var bIsChanged = (EBToolbarPreferenceManager_CT2384137.HasUserValue(strPrefName)) ?
  16035.                 EBToolbarPreferenceManager_CT2384137.GetPref(strPrefName) != iTTL : true;
  16036.             EBToolbarPreferenceManager_CT2384137.SetPref(strPrefName, iTTL);
  16037.             return bIsChanged;
  16038.         }
  16039.     }
  16040. }
  16041.  
  16042.  
  16043. var EBFeedConsts_CT2384137 = 
  16044. {
  16045.     DefaultInterval                : 60,
  16046.     MaxStructuredItems            : 50,
  16047.     MaxHistoryItems                : 200,
  16048.     NoTitleCaption                : '(no title)',
  16049.     NoItemsCaption                : 'No Items',
  16050.     Timeout                        : 30000,
  16051.     PrefFeedCountPrefix         : 'FeedLastCount',
  16052.     
  16053.     Observer:
  16054.     {
  16055.         Topic_FeedObserver: 'EBFeedObserverTopic_CT2384137',
  16056.         Data_FeedReload: 'EBFeed_FeedReload'
  16057.     }
  16058. }
  16059.  
  16060. var EBFeedManager_CT2384137 =
  16061. {
  16062.     SetFeedsCount: function(strId, iCount) {
  16063.         var strPrefName = EBFeedConsts_CT2384137.PrefFeedCountPrefix + strId;
  16064.         EBToolbarPreferenceManager_CT2384137.SetPref(strPrefName, iCount, true);
  16065.     },
  16066.  
  16067.     GetFeedsCount: function(strId) {
  16068.         var strPrefName = EBFeedConsts_CT2384137.PrefFeedCountPrefix + strId;
  16069.         var iCount = EBToolbarPreferenceManager_CT2384137.GetPref(strPrefName, true);
  16070.  
  16071.         if (iCount == null)
  16072.             iCount = 0;
  16073.  
  16074.         return iCount;
  16075.     },
  16076.  
  16077.     LoadFeedStructured: function(oFeedComponent, strXML) {
  16078.         var oFeedData = null;
  16079.         if (strXML) {
  16080.             var XMLDoc = EBXML_CT2384137.GetXmlDocument(strXML);
  16081.             oFeedData = EBFeedDataFactory_CT2384137.XMLToFeedData(XMLDoc);
  16082.         }
  16083.  
  16084.         //bug fix for previous releases, if no title, nullify last poll time, to get new and write it with title
  16085.         if (!oFeedData) //if it's not succeed load blank feed data
  16086.             oFeedData = this.CreateBlankFeedData();
  16087.  
  16088.         oFeedComponent.FeedData = oFeedData;
  16089.     },
  16090.  
  16091.     //the load functions load the data into the object! (as oppose to return the object);
  16092.     LoadEditableFeedStructured: function(oFeedComponent) {
  16093.         var strURL = oFeedComponent.ComponentItem.FeedURL;
  16094.         var strXML = EBFeedIOManager_CT2384137.ReadStructured(strURL);
  16095.         this.LoadFeedStructured(oFeedComponent, strXML);
  16096.     },
  16097.  
  16098.     LoadLiveFeedStructured: function(oFeedComponent) {
  16099.         var strURL = oFeedComponent.ComponentItem.FeedURL;
  16100.         var strXML = EBFeedIOManager_CT2384137.ReadLive(strURL);
  16101.         this.LoadFeedStructured(oFeedComponent, strXML);
  16102.     },
  16103.  
  16104.     LoadFeedHistory: function(oFeedComponent) {
  16105.         var strURL = oFeedComponent.ComponentItem.FeedURL;
  16106.         var oHistoryData = null;
  16107.         var strXML = EBFeedIOManager_CT2384137.ReadHistory(strURL);
  16108.         if (strXML) {
  16109.             var XMLDoc = EBXML_CT2384137.GetXmlDocument(strXML);
  16110.             oHistoryData = EBFeedDataFactory_CT2384137.XMLToHistoryData(XMLDoc);
  16111.         }
  16112.  
  16113.         if (!oHistoryData) {
  16114.             oHistoryData = this.CreateBlankHistoryData();
  16115.         }
  16116.  
  16117.         oFeedComponent.HistoryData = oHistoryData;
  16118.     },
  16119.  
  16120.     CreateBlankFeedData: function() {
  16121.         var oFeedDataData = new EBFeedDataData_CT2384137('', '', false, '');
  16122.         var oFeedItemArrayHashData = new EBFeedItemArrayHashData_CT2384137();
  16123.         var oFeedData = new EBFeedData_CT2384137(oFeedDataData, oFeedItemArrayHashData);
  16124.         return oFeedData;
  16125.     },
  16126.  
  16127.     CreateBlankHistoryData: function() {
  16128.         var oHistoryItemDataArrayHash = new EBArrayHashObject_CT2384137();
  16129.         var oHistoryData = new EBHistoryData_CT2384137(oHistoryItemDataArrayHash);
  16130.         return oHistoryData;
  16131.     },
  16132.  
  16133.     SaveStructured: function(oFeedComponent) {
  16134.         var oFeedData = oFeedComponent.FeedData;
  16135.         var strURL = oFeedComponent.ComponentItem.FeedURL;
  16136.         var strXML = oFeedData.XMLSerialize();
  16137.         EBFeedIOManager_CT2384137.WriteStructured(strURL, strXML);
  16138.     },
  16139.  
  16140.     SaveHistory: function(oFeedComponent) {
  16141.         var oHistoryData = oFeedComponent.HistoryData;
  16142.         var strURL = oFeedComponent.ComponentItem.FeedURL;
  16143.         var strXML = oHistoryData.XMLSerialize();
  16144.         EBFeedIOManager_CT2384137.WriteHistory(strURL, strXML);
  16145.     },
  16146.  
  16147.     SaveLive: function(oFeedComponent) {
  16148.         var oFeedData = oFeedComponent.FeedData;
  16149.         var strURL = oFeedComponent.ComponentItem.FeedURL;
  16150.         var strXML = oFeedData.XMLSerialize();
  16151.         EBFeedIOManager_CT2384137.WriteLive(strURL, strXML);
  16152.     },
  16153.  
  16154.     OnLoadFeedItem: function(oFeedComponent) {
  16155.         this.LoadComponentData(oFeedComponent);
  16156.         this.CheckServerRequest(oFeedComponent);
  16157.     },
  16158.  
  16159.     OnUnloadFeedItem: function(oFeedComponent) {
  16160.         this.ClearTimeoutID(oFeedComponent);
  16161.     },
  16162.  
  16163.     ClearTimeoutID: function(oFeedComponent) {
  16164.         if (oFeedComponent.TimeoutID) {
  16165.             clearTimeout(oFeedComponent.TimeoutID);
  16166.         }
  16167.     },
  16168.  
  16169.     CheckServerRequest: function(oFeedComponent) {
  16170.         if (this.IsTimeElapsed(oFeedComponent)) {
  16171.             //save poll date to now
  16172.             EBFeedPreferencesManager_CT2384137.SetFeedPollDate(oFeedComponent);
  16173.             this.ServerRequest(oFeedComponent);
  16174.         }
  16175.         else
  16176.             this.UpdateFeedData(oFeedComponent);
  16177.  
  16178.         this.SetTimeoutCheck(oFeedComponent);
  16179.     },
  16180.  
  16181.     SetTimeoutCheck: function(oFeedComponent) {
  16182.         var oFunction = function() {
  16183.             EBFeedManager_CT2384137.CheckServerRequest(oFeedComponent);
  16184.         };
  16185.         var iIntervalMinutes = this.GetFeedInterval(oFeedComponent);
  16186.         var iMillisecondInterval = iIntervalMinutes * 60 * 1000;
  16187.  
  16188.         oFeedComponent.TimeoutID = setTimeout(oFunction, iMillisecondInterval);
  16189.     },
  16190.  
  16191.     ResetTimeoutCheck: function(oFeedComponent) {
  16192.         if (oFeedComponent.TimeoutID)
  16193.             clearTimeout(oFeedComponent.TimeoutID);
  16194.  
  16195.         this.SetTimeoutCheck(oFeedComponent);
  16196.     },
  16197.  
  16198.     LoadComponentData: function(oFeedComponent) {
  16199.         if (oFeedComponent.IsLiveMode) {
  16200.             this.LoadLiveFeedStructured(oFeedComponent);
  16201.         }
  16202.         else {
  16203.             this.LoadEditableFeedStructured(oFeedComponent);
  16204.             this.LoadFeedHistory(oFeedComponent);
  16205.         }
  16206.     },
  16207.  
  16208.     ServerRequest: function(oFeedComponent) {
  16209.         var strURL = oFeedComponent.ComponentItem.FeedURL;
  16210.         //set the flag of the loading from server:
  16211.         oFeedComponent.LoadingFromServer = true;
  16212.         var oCallBackFunction = function(strXML, o) {
  16213.             //check if window is still exists
  16214.             if (typeof EBFeedManager_CT2384137 != "undefined")
  16215.                 EBFeedManager_CT2384137.ServerResponse(oFeedComponent, strXML, o);
  16216.         };
  16217.  
  16218.         var oRequest = EBWeb_CT2384137.HTTPServerRequest(strURL, null, false, oCallBackFunction);
  16219.         this.CheckServerTimeout(oFeedComponent, oRequest);
  16220.     },
  16221.  
  16222.     CheckServerTimeout: function(oFeedComponent, oRequest) {
  16223.         var oThreadFunction = function() {
  16224.             if (oFeedComponent.LoadingFromServer) {
  16225.                 oRequest.abort();
  16226.                 if (oFeedComponent.isCustom)
  16227.                     oFeedComponent.Invoke(false);
  16228.                 else
  16229.                     EBFeedManager_CT2384137.ServerResponse(oFeedComponent, '', null);
  16230.             }
  16231.         };
  16232.         setTimeout(oThreadFunction, EBFeedConsts_CT2384137.Timeout);
  16233.     },
  16234.  
  16235.     ServerResponse: function(oFeedComponent, strXML, o) {
  16236.         //the request is back so set the flag that it's not loading nomore:
  16237.         oFeedComponent.LoadingFromServer = false;
  16238.  
  16239.         if (oFeedComponent.isCustom)
  16240.             this.ParsePodcastFeed(oFeedComponent, strXML);
  16241.         else {
  16242.             if (oFeedComponent.IsLiveMode)
  16243.                 this.ParseLiveFeed(oFeedComponent, strXML);
  16244.             else
  16245.                 this.ParseEditableFeed(oFeedComponent, strXML);
  16246.         }
  16247.     },
  16248.  
  16249.     ParseEditableFeed: function(oFeedComponent, strXML) {
  16250.         var XMLDoc = null;
  16251.  
  16252.         if (strXML)
  16253.             XMLDoc = EBXML_CT2384137.GetXmlDocument(strXML);
  16254.  
  16255.         var bIsNewItemsFromServer = false;
  16256.  
  16257.         var oFeedParser = new EBFeedParser_CT2384137(XMLDoc, EBFeedConsts_CT2384137.MaxStructuredItems, oFeedComponent.ComponentItem.Podcast);
  16258.         //save the TTL
  16259.         if (oFeedParser.TTL) {
  16260.             var bIsChanged = EBFeedPreferencesManager_CT2384137.FeedTTL(oFeedComponent, oFeedParser.TTL);
  16261.             if (bIsChanged)
  16262.                 this.ResetTimeoutCheck(oFeedComponent);
  16263.         }
  16264.  
  16265.         var oFeedElementArrayHash = oFeedParser.ArrayHash;
  16266.         var oHistoryItemDataArrayHash = oFeedComponent.HistoryData.ArrayHash;
  16267.         var oFeedItemDataArrayHash = oFeedComponent.FeedData.Items.ArrayHash;
  16268.  
  16269.         //update feeddata data from server
  16270.         var strFeedTitle = oFeedParser.Title;
  16271.         var strFeedLink = oFeedParser.Link;
  16272.         oFeedComponent.FeedData.Data.Language = oFeedParser.Language;
  16273.  
  16274.         if (strFeedTitle)
  16275.             oFeedComponent.FeedData.Data.Title = strFeedTitle;
  16276.         else //if there isn't title take the title from the settings
  16277.             oFeedComponent.FeedData.Data.Title = oFeedComponent.ComponentItem.Title;
  16278.  
  16279.         if (strFeedLink)
  16280.             oFeedComponent.FeedData.Data.Link = strFeedLink;
  16281.         else //if there isn't link from the feed take the feed URL
  16282.             oFeedComponent.FeedData.Data.Link = oFeedComponent.ComponentItem.FeedURL;
  16283.  
  16284.         //compare between the items from the server to the items in the history and the structured
  16285.         if (oFeedElementArrayHash.Count() > 0) {
  16286.             var strTitle = '';
  16287.             var strLink = '';
  16288.             var strTooltip = '';
  16289.             var strStatus = '';
  16290.             var bVisited = false;
  16291.  
  16292.             //run on the items from the server
  16293.             var iCount = oFeedElementArrayHash.Count();
  16294.             var oFeedElement = null;
  16295.             var bIsItemInStructured = false;
  16296.             var bIsItemInHistory = false;
  16297.             var strHashKey = '';
  16298.  
  16299.             var oFeedItemData = null;
  16300.             //go backwards in the server items to add the newset items in the feed to the top of the structured ArrayHash
  16301.             for (var i = iCount - 1; i >= 0; i--) {
  16302.                 oFeedElement = oFeedElementArrayHash.GetByIndex(i);
  16303.                 strHashKey = oFeedElement.Link;
  16304.  
  16305.                 //check structured
  16306.                 bIsItemInStructured = oFeedItemDataArrayHash.Contains(strHashKey);
  16307.                 //check history
  16308.                 bIsItemInHistory = oHistoryItemDataArrayHash.Contains(strHashKey);
  16309.  
  16310.                 //check to add this item to the structured if it's not in structured or in history
  16311.                 if (!bIsItemInStructured && !bIsItemInHistory) {
  16312.                     bIsNewItemsFromServer = true;
  16313.                     //insert the new item to the structured hasharray
  16314.                     strTitle = this.GetTitle(oFeedElement.Title);
  16315.                     strLink = oFeedElement.Link;
  16316.                     strTooltip = this.GetTooltipCaption(oFeedElement.Date);
  16317.                     strStatus = EBFeedXMLConsts_CT2384137.UNREAD;
  16318.  
  16319.                     oFeedItemData = new EBFeedItemData_CT2384137(strTitle,
  16320.                                                     strLink,
  16321.                                                     strTooltip,
  16322.                                                     strStatus,
  16323.                                                     bVisited);
  16324.  
  16325.                     //insert to the top
  16326.                     oFeedItemDataArrayHash.Insert(0, oFeedItemData.Link, oFeedItemData);
  16327.                 }
  16328.             }
  16329.         }
  16330.  
  16331.         //check to save the data
  16332.         if (bIsNewItemsFromServer) {
  16333.             oFeedComponent.FeedData.Data.Stared = true;
  16334.             this.SaveFeedDataStructured(oFeedComponent);
  16335.  
  16336.             //check if there is dialog open with this component to refill it with the new data
  16337.             this.CheckToRefillDialog(oFeedComponent);
  16338.         }
  16339.  
  16340.         this.UpdateFeedData(oFeedComponent);
  16341.     },
  16342.  
  16343.     ParsePodcastFeed: function(oFeedComponent, strXML) {
  16344.         var XMLDoc = null;
  16345.  
  16346.         if (strXML)
  16347.             XMLDoc = EBXML_CT2384137.GetXmlDocument(strXML);
  16348.  
  16349.         var bIsNewItemsFromServer = false;
  16350.  
  16351.         var oFeedParser = new EBFeedParser_CT2384137(XMLDoc, EBFeedConsts_CT2384137.MaxStructuredItems, oFeedComponent.ComponentItem.Podcast);
  16352.         //save the TTL
  16353.         if (oFeedParser.TTL) {
  16354.             var bIsChanged = EBFeedPreferencesManager_CT2384137.FeedTTL(oFeedComponent, oFeedParser.TTL);
  16355.             if (bIsChanged)
  16356.                 this.ResetTimeoutCheck(oFeedComponent);
  16357.         }
  16358.  
  16359.         var oFeedElementArrayHash = oFeedParser.ArrayHash;
  16360.         var oFeedItemDataArrayHash = oFeedComponent.FeedData.Items.ArrayHash;
  16361.         oFeedItemDataArrayHash.Clear();
  16362.  
  16363.         //update feeddata data from server
  16364.         var strFeedTitle = oFeedParser.Title;
  16365.         var strFeedLink = oFeedParser.Link;
  16366.         oFeedComponent.FeedData.Data.Language = oFeedParser.Language;
  16367.  
  16368.         if (strFeedTitle)
  16369.             oFeedComponent.FeedData.Data.Title = strFeedTitle;
  16370.         else //if there isn't title take the title from the settings
  16371.             oFeedComponent.FeedData.Data.Title = oFeedComponent.ComponentItem.Title;
  16372.  
  16373.         if (strFeedLink)
  16374.             oFeedComponent.FeedData.Data.Link = strFeedLink;
  16375.         else //if there isn't link from the feed take the feed URL
  16376.             oFeedComponent.FeedData.Data.Link = oFeedComponent.ComponentItem.FeedURL;
  16377.  
  16378.         //compare between the items from the server to the items in the history and the structured
  16379.         if (oFeedElementArrayHash.Count() > 0) {
  16380.             var strTitle = '';
  16381.             var strLink = '';
  16382.             var strTooltip = '';
  16383.             var strStatus = '';
  16384.             var bVisited = false;
  16385.  
  16386.             //run on the items from the server
  16387.             var iCount = oFeedElementArrayHash.Count();
  16388.             var oFeedElement = null;
  16389.             var bIsItemInStructured = false;
  16390.             var bIsItemInHistory = false;
  16391.             var strHashKey = '';
  16392.  
  16393.             var oFeedItemData = null;
  16394.             //go backwards in the server items to add the newset items in the feed to the top of the structured ArrayHash
  16395.             for (var i = 0; i < iCount; i++) {
  16396.                 oFeedElement = oFeedElementArrayHash.GetByIndex(i);
  16397.                 strHashKey = oFeedElement.Link;
  16398.                 strTitle = this.GetTitle(oFeedElement.Title);
  16399.                 strLink = oFeedElement.Link;
  16400.                 strTooltip = this.GetTooltipCaption(oFeedElement.Date);
  16401.                 strStatus = EBFeedXMLConsts_CT2384137.UNREAD;
  16402.                 oFeedItemData = new EBFeedItemData_CT2384137(strTitle,
  16403.                                                 strLink,
  16404.                                                 strTooltip,
  16405.                                                 strStatus,
  16406.                                                 bVisited);
  16407.  
  16408.                 //insert to the top
  16409.                 oFeedItemDataArrayHash.Add(oFeedItemData.Link, oFeedItemData);
  16410.             }
  16411.         }
  16412.  
  16413.         oFeedComponent.FeedData.Data.Stared = true;
  16414.         this.SaveFeedDataStructured(oFeedComponent);
  16415.         this.UpdateFeedData(oFeedComponent);
  16416.     },
  16417.  
  16418.     ParseLiveFeed: function(oFeedComponent, strXML) {
  16419.         var XMLDoc = null;
  16420.  
  16421.         if (strXML)
  16422.             XMLDoc = EBXML_CT2384137.GetXmlDocument(strXML);
  16423.  
  16424.         var oFeedParser = new EBFeedParser_CT2384137(XMLDoc, EBFeedConsts_CT2384137.MaxStructuredItems);
  16425.         //save the TTL
  16426.         if (oFeedParser.TTL) {
  16427.             var bIsChanged = EBFeedPreferencesManager_CT2384137.FeedTTL(oFeedComponent, oFeedParser.TTL);
  16428.             if (bIsChanged)
  16429.                 this.ResetTimeoutCheck(oFeedComponent);
  16430.         }
  16431.  
  16432.         var oFeedElementArrayHash = oFeedParser.ArrayHash;
  16433.         var oFeedItemDataArrayHash = oFeedComponent.FeedData.Items.ArrayHash;
  16434.         var strFeedTitle = oFeedParser.Title;
  16435.         oFeedComponent.FeedData.Data.Language = oFeedParser.Language;
  16436.  
  16437.         if (strFeedTitle)
  16438.             oFeedComponent.FeedData.Data.Title = strFeedTitle;
  16439.         else //if there isn't title take the title from the settings
  16440.             oFeedComponent.FeedData.Data.Title = oFeedComponent.ComponentItem.Title;
  16441.  
  16442.         //check first if there is something new from the server:
  16443.         var bIsNewItems = false;
  16444.         var iCount = oFeedElementArrayHash.Count();
  16445.         var oFeedElement = null;
  16446.         var i;
  16447.         for (i = 0; i < iCount; i++) {
  16448.             oFeedElement = oFeedElementArrayHash.GetByIndex(i);
  16449.             strHashKey = oFeedElement.Link;
  16450.  
  16451.             //check if exists:
  16452.             if (!oFeedItemDataArrayHash.Contains(strHashKey)) {
  16453.                 bIsNewItems = true;
  16454.                 break;
  16455.             }
  16456.         }
  16457.  
  16458.         //if there is new items - clear all the existing ones and add what comes from the server
  16459.         if (bIsNewItems) {
  16460.             //clear all the items in the feed item data array hash:
  16461.             oFeedItemDataArrayHash.Clear();
  16462.  
  16463.             var strTitle = '';
  16464.             var strLink = '';
  16465.             var strTooltip = '';
  16466.             var strStatus = '';
  16467.             var bVisited = false;
  16468.  
  16469.             var oFeedItemData = null;
  16470.             for (i = 0; i < iCount; i++) {
  16471.                 oFeedElement = oFeedElementArrayHash.GetByIndex(i);
  16472.                 //in the live mode there isn't any need for tooltip and status 
  16473.                 //but i keep them in case this live mode will become regular mode and becasue 
  16474.                 //the live and editable mode save in the same data structure type
  16475.                 strTitle = this.GetTitle(oFeedElement.Title);
  16476.                 strLink = oFeedElement.Link;
  16477.                 strTooltip = this.GetTooltipCaption(oFeedElement.Date);
  16478.                 strStatus = EBFeedXMLConsts_CT2384137.UNREAD;
  16479.  
  16480.                 oFeedItemData = new EBFeedItemData_CT2384137(strTitle,
  16481.                                                 strLink,
  16482.                                                 strTooltip,
  16483.                                                 strStatus,
  16484.                                                 bVisited);
  16485.  
  16486.                 //insert to the top
  16487.                 oFeedItemDataArrayHash.Add(oFeedItemData.Link, oFeedItemData);
  16488.             }
  16489.  
  16490.             //save the data and broadcast
  16491.             oFeedComponent.FeedData.Data.Stared = true;
  16492.             this.SaveFeedDataStructured(oFeedComponent);
  16493.         }
  16494.  
  16495.         this.notifyUpdate(oFeedComponent);
  16496.     },
  16497.  
  16498.     CheckToRefillDialog: function(oFeedComponent) {
  16499.         //if there is opened feed popup, update it
  16500.         try {
  16501.             var popup = EBFeedUIManager_CT2384137.currentFeedPopup;
  16502.             if (!popup || !popup.manager || !popup.manager.reload ||
  16503.             popup.manager.m_oFeedComponent.ComponentItem.UniqueCompID != oFeedComponent.ComponentItem.UniqueCompID) return;
  16504.  
  16505.             EBFeedUIManager_CT2384137.currentFeedPopup.manager.reload(oFeedComponent);
  16506.         }
  16507.         catch (ex) {
  16508.             EBLog(ex);
  16509.         }
  16510.     },
  16511.  
  16512.     SaveFeedDataStructured: function(oFeedComponent) {
  16513.         this.ValidateMaxStructuredItems(oFeedComponent.FeedData);
  16514.         if (oFeedComponent.IsLiveMode)
  16515.             this.SaveLive(oFeedComponent);
  16516.         else
  16517.             this.SaveStructured(oFeedComponent);
  16518.     },
  16519.  
  16520.     ValidateMaxStructuredItems: function(oFeedData) {
  16521.         var oFeedItemDataArrayHash = oFeedData.Items.ArrayHash;
  16522.         var oFeedItemData = null;
  16523.         var iCount = oFeedItemDataArrayHash.Count();
  16524.         var iLastIndex = 0;
  16525.         while (iCount > EBFeedConsts_CT2384137.MaxStructuredItems) {
  16526.             //remove the last element
  16527.             iLastIndex = iCount - 1;
  16528.             oFeedItemData = oFeedItemDataArrayHash.GetByIndex(iLastIndex);
  16529.             if (oFeedItemData) {
  16530.                 oFeedItemDataArrayHash.Remove(iLastIndex, oFeedItemData.Link);
  16531.                 iCount = oFeedItemDataArrayHash.Count();
  16532.             }
  16533.             else
  16534.             //if there isn't item in that index for some reason break the loop!
  16535.                 break;
  16536.         }
  16537.  
  16538.     },
  16539.  
  16540.     SaveFeedDataHistory: function(oFeedComponent) {
  16541.         this.ValidateMaxHistoryItems(oFeedComponent.HistoryData);
  16542.         this.SaveHistory(oFeedComponent);
  16543.     },
  16544.  
  16545.     ValidateMaxHistoryItems: function(oHistoryData) {
  16546.         var oHistoryItemDataArrayHash = oHistoryData.ArrayHash;
  16547.  
  16548.         var oHistoryItemData = null;
  16549.         var iCount = oHistoryItemDataArrayHash.Count();
  16550.         var iLastIndex = 0;
  16551.         while (iCount > EBFeedConsts_CT2384137.MaxHistoryItems) {
  16552.             //remove the last element
  16553.             iLastIndex = iCount - 1;
  16554.             oHistoryItemData = oHistoryItemDataArrayHash.GetByIndex(iLastIndex);
  16555.             if (oHistoryItemData) {
  16556.                 oHistoryItemDataArrayHash.Remove(iLastIndex, oHistoryItemData.Link);
  16557.                 iCount = oHistoryItemDataArrayHash.Count();
  16558.             }
  16559.             else
  16560.             //if there isn't item in that index for some reason break the loop!
  16561.                 break;
  16562.         }
  16563.     },
  16564.  
  16565.     //update the NumOfNew of the feed component and then set the button label to the current new messages
  16566.     UpdateFeedData: function(oFeedComponent) {
  16567.         if (!oFeedComponent.IsLiveMode) {
  16568.             var iNumOfNew = 0;
  16569.             var oFeedItemDataArrayHash = oFeedComponent.FeedData.Items.ArrayHash;
  16570.             var oHistoryItemDataArrayHash = oFeedComponent.HistoryData.ArrayHash;
  16571.  
  16572.             //go through all the items - check that they are not in history 
  16573.             //and they are not read to increase the counter
  16574.             var oFeedItemData = null;
  16575.             var iCount = oFeedItemDataArrayHash.Count();
  16576.  
  16577.             for (var i = 0; i < iCount; i++) {
  16578.                 oFeedItemData = oFeedItemDataArrayHash.GetByIndex(i);
  16579.                 //check that the item is not in the history and it's unread
  16580.                 if (!oHistoryItemDataArrayHash.Contains(oFeedItemData.Link) &&
  16581.                     oFeedItemData.Status == EBFeedXMLConsts_CT2384137.UNREAD)
  16582.                     iNumOfNew++;
  16583.             }
  16584.  
  16585.             //update the object data
  16586.             oFeedComponent.NumOfNew = iNumOfNew;
  16587.         }
  16588.  
  16589.         if (oFeedComponent.isCustom)
  16590.             oFeedComponent.Invoke(true);
  16591.         else
  16592.             this.notifyUpdate(oFeedComponent);
  16593.     },
  16594.  
  16595.     notifyUpdate: function(oFeedComponent) {
  16596.         var subject = new Object();
  16597.         subject.feedComponent = oFeedComponent;
  16598.         subject.uniqueCompID = (oFeedComponent.IsMultiFeed) ? oFeedComponent.MultiFeedCompID : oFeedComponent.ComponentItem.UniqueCompID;
  16599.         subject.wrappedJSObject = subject;
  16600.  
  16601.         EBObserversManager_CT2384137.NotifyCustomObserver(subject,
  16602.                                                             EBFeedConsts_CT2384137.Observer.Topic_FeedObserver,
  16603.                                                             EBFeedConsts_CT2384137.Observer.Data_FeedReload);
  16604.  
  16605.     },
  16606.  
  16607.     //check if the time has passed to check again from the server
  16608.     IsTimeElapsed: function(oFeedComponent) {
  16609.         var bRetVal = true;
  16610.  
  16611.         var strPollDatePrefValue = EBFeedPreferencesManager_CT2384137.GetFeedPollDate(oFeedComponent);
  16612.         //check if that it's not empty
  16613.         if (strPollDatePrefValue) {
  16614.             //check difference between times:
  16615.             var iIntervalMinutes = this.GetFeedInterval(oFeedComponent);
  16616.             var oDateCurrent = new Date();
  16617.             var oDatePollDate = new Date(strPollDatePrefValue);
  16618.  
  16619.             var iCheckIntervalTime = 1000 * 60 * iIntervalMinutes;
  16620.  
  16621.             var iDateDiff = oDateCurrent - oDatePollDate;
  16622.  
  16623.             bRetVal = iDateDiff > iCheckIntervalTime;
  16624.  
  16625.         }
  16626.         return bRetVal;
  16627.     },
  16628.  
  16629.     GetFeedInterval: function(oFeedComponent) {
  16630.         var iInterval = oFeedComponent.ComponentItem.Interval;
  16631.         if (!iInterval || !isFinite(iInterval)) {
  16632.             iInterval = EBFeedConsts_CT2384137.DefaultInterval;
  16633.         }
  16634.         var iTTL = EBFeedPreferencesManager_CT2384137.FeedTTL(oFeedComponent);
  16635.         if (!iTTL) iTTL = 0;
  16636.         iInterval = Math.max(iInterval, iTTL);
  16637.         return iInterval;
  16638.     },
  16639.  
  16640.     GetTitle: function(strTitle) {
  16641.         if (!strTitle) {
  16642.             strTitle = EBFeedConsts_CT2384137.NoTitleCaption;
  16643.         }
  16644.         else {
  16645.             strTitle = strTitle.replace(/\n/g, '');
  16646.             strTitle = strTitle.replace(/\r/g, '');
  16647.             strTitle = EBGlobalManager_CT2384137.TrimToOne(strTitle);
  16648.             strTitle = EBGlobalManager_CT2384137.ToStripHTML(strTitle);
  16649.         }
  16650.  
  16651.         return strTitle;
  16652.     },
  16653.  
  16654.     GetTooltipCaption: function(strDate) {
  16655.         var strTooltip = 'Posted ' + strDate;
  16656.         return strTooltip;
  16657.     },
  16658.  
  16659.     ConstructRSSFeedXML: function(uniqueCompId, url, interval, isPodcast, isLiveMode) {
  16660.         var strXML = EBXML_CT2384137.CreateXmlNodeStartString(EBFeedXMLConsts_CT2384137.RSS_FEED_ITEM);
  16661.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.LINK, url);
  16662.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.PERMISSIONS, EBFeedXMLConsts_CT2384137.PermissionsValue);
  16663.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.USER_ATTRIBUTES, EBFeedXMLConsts_CT2384137.UserAttributesValue);
  16664.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.UNIQUE_COMP_ID, uniqueCompId);
  16665.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.DISPLAY_TEXT, '');
  16666.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.DISPLAY_ICON, '');
  16667.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.TITLE, '');
  16668.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.INTERVAL, interval);
  16669.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.ICON_NORMAL_URL, '');
  16670.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.IMAGE_STYLE, '');
  16671.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.LIVE_MODE, isLiveMode);
  16672.         strXML += EBXML_CT2384137.CreateXmlNodeString(EBFeedXMLConsts_CT2384137.PODCAST, isPodcast);
  16673.         strXML += EBXML_CT2384137.CreateXmlNodeEndString(EBFeedXMLConsts_CT2384137.RSS_FEED_ITEM);
  16674.  
  16675.         return EBXML_CT2384137.GetXmlDocument(strXML).documentElement;
  16676.     }
  16677. }
  16678. var FeedParserConsts_CT2384137 =
  16679. {
  16680.     TYPE : 
  16681.     {
  16682.         RSS        : 'RSS',
  16683.         ATOM    : 'ATOM'     
  16684.     },
  16685.  
  16686.     RSS : 
  16687.     {
  16688.         CHANNEL        : 'channel',
  16689.         ITEM        : 'item',
  16690.         TITLE        : 'title',
  16691.         LINK        : 'link',
  16692.         GUID        : 'guid',
  16693.         PUBDATE        : 'pubdate',
  16694.         DCDATE        : 'dc:date',
  16695.         ISPERMALINK : 'isPermaLink',
  16696.         TRUE        : 'true',
  16697.         FALSE        : 'false',
  16698.         ENCLOSURE    : 'enclosure',
  16699.         URL            : 'url',
  16700.         LANGUAGE    : 'language',
  16701.         TTL: 'ttl'
  16702.     },
  16703.     
  16704.     ATOM : 
  16705.     {
  16706.         ENTRY        : 'entry',
  16707.         TITLE        : 'title',
  16708.         LINK        : 'link',
  16709.         HREF        : 'href',
  16710.         MODIFIED    : 'modified',
  16711.         TYPE        : 'type',
  16712.         TEXTHTML    : 'text/html',
  16713.         UPDATED     : 'updated',
  16714.         REL         : 'rel',
  16715.         ALTERNATE   : 'alternate'
  16716.     }
  16717. }
  16718.  
  16719. function EBFeedElement_CT2384137(strTitle,strLink,strDate)
  16720. {
  16721.     this.Title    = strTitle;
  16722.     this.Link    = strLink;
  16723.     this.Date    = strDate;
  16724. }
  16725.  
  16726. function EBFeedParser_CT2384137(XMLDoc,iMaxElements,isPodcast)
  16727. {
  16728.     this.Type            = '';
  16729.     
  16730.     this.Title            = '';
  16731.     this.Link            = '';
  16732.     this.ArrayHash        = new EBArrayHashObject_CT2384137();
  16733.     this.MaxElements    = iMaxElements;
  16734.     this.Language = '';
  16735.     this.TTL = 0;
  16736.  
  16737.     this.Init = function(XMLDoc)
  16738.     {
  16739.         if(XMLDoc)
  16740.         {
  16741.             var XMLRoot = XMLDoc.documentElement;
  16742.             if(XMLRoot.tagName != 'parsererror')
  16743.             {
  16744.                 this.BuildFeed(XMLRoot);
  16745.             }
  16746.         }
  16747.     };
  16748.     
  16749.     this.BuildFeed = function(XMLRoot)
  16750.     {
  16751.         var XMLFeedItems = this.GetFeedItems(XMLRoot);
  16752.         this.SetFeedLanguage(XMLRoot);
  16753.         this.SetFeedTTL(XMLRoot);
  16754.         
  16755.         if(XMLFeedItems)
  16756.         {
  16757.             if(this.Type == FeedParserConsts_CT2384137.TYPE.RSS)
  16758.             {
  16759.                 this.SetRSSFeedTitleLink(XMLRoot);
  16760.                 this.BuildRSSFeedItems(XMLFeedItems);
  16761.             }
  16762.             else if(this.Type == FeedParserConsts_CT2384137.TYPE.ATOM)
  16763.             {
  16764.                 this.SetATOMFeedTitleLink(XMLRoot);
  16765.                 this.BuildATOMFeedItems(XMLFeedItems);
  16766.             }
  16767.         }
  16768.     };
  16769.  
  16770.     this.SetFeedLanguage = function(XMLRoot) {
  16771.         var lang = XMLRoot.getElementsByTagName(FeedParserConsts_CT2384137.RSS.LANGUAGE);
  16772.         if (lang.length > 0) {
  16773.             this.Language = EBXML_CT2384137.GetXmlNodeValue(lang.item(0));
  16774.         }
  16775.     };
  16776.  
  16777.     this.SetFeedTTL = function(XMLRoot) {
  16778.         this.TTL = EBXML_CT2384137.GetSingleNodeValueAsInteger(XMLRoot, FeedParserConsts_CT2384137.RSS.TTL, 0);
  16779.     };
  16780.  
  16781.     this.BuildRSSFeedItems = function(XMLFeedItems) {
  16782.         var strTitle = '';
  16783.         var strLink = '';
  16784.         var strDate = '';
  16785.  
  16786.         var strURLFromLinkNode = '';
  16787.         var strURLFromEnclosureNode = '';
  16788.         var oAttributes = null;
  16789.         var oAttURL = '';
  16790.         var strURLFromGUIDPermaLinkNode = '';
  16791.  
  16792.         var strTagName = '';
  16793.  
  16794.         var XMLFeedItem = null;
  16795.         var XMLChildNode = null;
  16796.         for (var i = 0; i < XMLFeedItems.length; i++) {
  16797.             XMLFeedItem = XMLFeedItems.item(i);
  16798.             for (var j = 0; j < XMLFeedItem.childNodes.length; j++) {
  16799.                 XMLChildNode = XMLFeedItem.childNodes[j];
  16800.                 strTagName = XMLChildNode.tagName;
  16801.                 if (typeof (strTagName) == 'string') {
  16802.                     strTagName = strTagName.toLowerCase();
  16803.                 }
  16804.  
  16805.                 if (strTagName == FeedParserConsts_CT2384137.RSS.TITLE) {
  16806.                     strTitle = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  16807.                 }
  16808.                 else if (strTagName == FeedParserConsts_CT2384137.RSS.ENCLOSURE) {
  16809.                     oAttributes = XMLChildNode.attributes;
  16810.                     oAttURL = oAttributes.getNamedItem(FeedParserConsts_CT2384137.RSS.URL);
  16811.                     strURLFromEnclosureNode = oAttURL.nodeValue;
  16812.                 }
  16813.                 else if (strTagName == FeedParserConsts_CT2384137.RSS.LINK) {
  16814.                     strURLFromLinkNode = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  16815.                 }
  16816.                 else if (strTagName == FeedParserConsts_CT2384137.RSS.GUID) {
  16817.                     strURLFromGUIDPermaLinkNode = this.GetRSSLinkFromXMLGUIDNode(XMLChildNode);
  16818.                 }
  16819.                 else if (strTagName == FeedParserConsts_CT2384137.RSS.PUBDATE) {
  16820.                     strDate = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  16821.                 }
  16822.                 else if (strTagName == FeedParserConsts_CT2384137.RSS.DCDATE) {
  16823.                     strDate = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  16824.                 }
  16825.             }
  16826.  
  16827.             if (isPodcast) {
  16828.                 strLink = strURLFromEnclosureNode ? strURLFromEnclosureNode : strURLFromLinkNode;
  16829.             }
  16830.             else {
  16831.                 strLink = strURLFromLinkNode ? strURLFromLinkNode : strURLFromGUIDPermaLinkNode;
  16832.             }
  16833.  
  16834.             if (strLink) {
  16835.                 this.AddFeedElement(strTitle, strLink, strDate);
  16836.             }
  16837.  
  16838.             if (this.IsMaxElements()) {
  16839.                 break;
  16840.             }
  16841.         }
  16842.     };
  16843.  
  16844.     this.BuildATOMFeedItems = function(XMLFeedItems) {
  16845.         var strTitle = '';
  16846.         var strLink = '';
  16847.         var strDate = '';
  16848.  
  16849.         var strURLFromLinkNodeTextHTML = '';
  16850.         var strURLFromLinkNode = '';
  16851.  
  16852.         var strTagName = '';
  16853.         var XMLFeedItem = null;
  16854.         var xpathResult = null;
  16855.         for (var i = 0; i < XMLFeedItems.length; i++) {
  16856.             XMLFeedItem = XMLFeedItems.item(i);
  16857.             strTitle = EBXML_CT2384137.GetSingleNodeValue(XMLFeedItem, FeedParserConsts_CT2384137.ATOM.TITLE);
  16858.             strDate = EBXML_CT2384137.GetSingleNodeValue(XMLFeedItem, FeedParserConsts_CT2384137.ATOM.UPDATED);
  16859.             strLink = this.GetAtomLink(XMLFeedItem);
  16860.  
  16861.             if (strLink && strTitle)
  16862.                 this.AddFeedElement(strTitle, strLink, strDate);
  16863.  
  16864.             if (this.IsMaxElements())
  16865.                 break;
  16866.         }
  16867.     };
  16868.  
  16869.     this.GetAtomLink = function(xmlElement) {
  16870.         var arrLink = xmlElement.getElementsByTagName(FeedParserConsts_CT2384137.ATOM.LINK);
  16871.         var xmlLink = "";
  16872.         
  16873.         //only one link tag, return it.
  16874.         if (arrLink.length == 1) return arrLink[0].getAttribute(FeedParserConsts_CT2384137.ATOM.HREF);
  16875.         
  16876.         for (var i = 0; i < arrLink.length; i++) {
  16877.             xmlLink = arrLink.item(i);
  16878.             if (xmlLink.getAttribute(FeedParserConsts_CT2384137.ATOM.TYPE) == FeedParserConsts_CT2384137.ATOM.TEXTHTML &&
  16879.                 xmlLink.getAttribute(FeedParserConsts_CT2384137.ATOM.REL) == FeedParserConsts_CT2384137.ATOM.ALTERNATE)
  16880.                 return xmlLink.getAttribute(FeedParserConsts_CT2384137.ATOM.HREF);
  16881.         }
  16882.  
  16883.         return "";
  16884.     };
  16885.     
  16886.     this.AddFeedElement = function(strTitle,strLink,strDate)
  16887.     {
  16888.         var oFeedElement = new EBFeedElement_CT2384137(strTitle,strLink,strDate);
  16889.         this.ArrayHash.Add(oFeedElement.Link,oFeedElement);
  16890.     };
  16891.     
  16892.     this.IsMaxElements = function()
  16893.     {
  16894.         var bRetVal = false;
  16895.         
  16896.         if(this.MaxElements && this.ArrayHash.Count() >= this.MaxElements)
  16897.         {
  16898.             bRetVal = true;
  16899.         }        
  16900.         
  16901.         return bRetVal;
  16902.     };
  16903.     
  16904.     this.GetFeedItems = function(XMLRoot)
  16905.     {
  16906.         var XMLFeedItems = null;
  16907.         //check rss
  16908.         XMLFeedItems = XMLRoot.getElementsByTagName(FeedParserConsts_CT2384137.RSS.ITEM);
  16909.         if(XMLFeedItems.length > 0)
  16910.         {
  16911.             this.Type    = FeedParserConsts_CT2384137.TYPE.RSS;
  16912.             return XMLFeedItems;
  16913.         }
  16914.         
  16915.         //check atom
  16916.         XMLFeedItems = XMLRoot.getElementsByTagName(FeedParserConsts_CT2384137.ATOM.ENTRY);
  16917.         if(XMLFeedItems.length > 0)
  16918.         {
  16919.             this.Type    = FeedParserConsts_CT2384137.TYPE.ATOM;
  16920.             return XMLFeedItems;
  16921.         }
  16922.         
  16923.         return null;
  16924.         
  16925.     };
  16926.  
  16927.     this.SetRSSFeedTitleLink = function(XMLRoot) {
  16928.         var strFeedTitle = '';
  16929.         var strFeedLink = '';
  16930.         var XMLChildNode = null;
  16931.         var XMLChannelNode = null;
  16932.         var strTagName = '';
  16933.         var i;
  16934.         for (i = 0; i < XMLRoot.childNodes.length; i++) {
  16935.             XMLChildNode = XMLRoot.childNodes[i];
  16936.             strTagName = XMLChildNode.tagName;
  16937.             
  16938.             if (typeof (strTagName) == 'string')
  16939.                 strTagName = strTagName.toLowerCase();
  16940.  
  16941.             if (strTagName == FeedParserConsts_CT2384137.RSS.CHANNEL) {
  16942.                 XMLChannelNode = XMLChildNode;
  16943.                 break;
  16944.             }
  16945.         }
  16946.  
  16947.         if (XMLChannelNode) {
  16948.             for (i = 0; i < XMLChannelNode.childNodes.length; i++) {
  16949.                 XMLChildNode = XMLChannelNode.childNodes[i];
  16950.                 strTagName = XMLChildNode.tagName;
  16951.                 if (typeof (strTagName) == 'string')
  16952.                     strTagName = strTagName.toLowerCase();
  16953.  
  16954.                 if (strTagName == FeedParserConsts_CT2384137.RSS.TITLE)
  16955.                     strFeedTitle = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  16956.                 else if (strTagName == FeedParserConsts_CT2384137.RSS.LINK)
  16957.                     strFeedLink = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  16958.  
  16959.                 if (strFeedTitle && strFeedLink)
  16960.                     break;
  16961.             }
  16962.         }
  16963.         
  16964.         this.Title = strFeedTitle;
  16965.         this.Link = strFeedLink;
  16966.     };
  16967.     
  16968.     this.SetATOMFeedTitleLink = function(XMLRoot)
  16969.     {
  16970.         var strFeedTitle    = '';
  16971.         var strFeedLink        = '';
  16972.         var XMLChildNode    = null;
  16973.         var strTagName        = '';
  16974.         
  16975.         for(var i=0;i<XMLRoot.childNodes.length;i++)
  16976.         {
  16977.             XMLChildNode = XMLRoot.childNodes[i];
  16978.             strTagName     = XMLChildNode.tagName;
  16979.             if(typeof(strTagName) == 'string')
  16980.             {
  16981.                 strTagName = strTagName.toLowerCase();
  16982.             }
  16983.             
  16984.             if(strTagName == FeedParserConsts_CT2384137.ATOM.TITLE)
  16985.             {
  16986.                 strFeedTitle = EBXML_CT2384137.GetXmlNodeValue(XMLChildNode);
  16987.             }
  16988.             else if(strTagName == FeedParserConsts_CT2384137.ATOM.LINK)
  16989.             {
  16990.                 strFeedLink = this.GetATOMLinkFromXMLLinkNodeTextHTML(XMLChildNode);
  16991.                 if(!strFeedLink)
  16992.                 {
  16993.                     strFeedLink =  this.GetATOMLinkFromXMLLink(XMLChildNode);
  16994.                 }
  16995.             }
  16996.             
  16997.             if(strFeedTitle && strFeedLink)
  16998.             {
  16999.                 break;
  17000.             }
  17001.         }
  17002.         
  17003.         this.Title        = strFeedTitle;
  17004.         this.Link        = strFeedLink;
  17005.     };
  17006.  
  17007.     this.GetATOMLinkFromXMLLinkNodeTextHTML = function(XMLLinkNode) {
  17008.         var strLink = '';
  17009.  
  17010.         var oAttributes = null;
  17011.         var oAttType = null;
  17012.         var oAttHref = null;
  17013.  
  17014.         oAttributes = XMLLinkNode.attributes;
  17015.         oAttHref = oAttributes.getNamedItem(FeedParserConsts_CT2384137.ATOM.HREF);
  17016.         oAttType = oAttributes.getNamedItem(FeedParserConsts_CT2384137.ATOM.TYPE);
  17017.         if (oAttHref && oAttType && oAttType.nodeValue.toLowerCase() == FeedParserConsts_CT2384137.ATOM.TEXTHTML)
  17018.             strLink = oAttHref.nodeValue;
  17019.  
  17020.         if(strLink)
  17021.             strLink = EBUrl_CT2384137.AddHTTPProtocol(strLink);
  17022.         
  17023.         return strLink;
  17024.     };
  17025.     
  17026.     this.GetATOMLinkFromXMLLink = function(XMLLinkNode)
  17027.     {
  17028.         var strLink = '';
  17029.     
  17030.         var oAttributes        = null;
  17031.         var oAttHref        = null;
  17032.         
  17033.         oAttributes = XMLLinkNode.attributes;
  17034.         oAttHref    = oAttributes.getNamedItem(FeedParserConsts_CT2384137.ATOM.HREF);
  17035.         
  17036.         if(oAttHref)
  17037.             strLink = oAttHref.nodeValue;
  17038.         
  17039.         if(strLink)
  17040.             strLink = EBUrl_CT2384137.AddHTTPProtocol(strLink);
  17041.         
  17042.         return strLink;
  17043.     };    
  17044.     
  17045.     this.GetRSSLinkFromXMLGUIDNode = function(XMLGUIDNode)
  17046.     {
  17047.         var strLink = '';
  17048.         var oAttributes        = null;
  17049.         var oAttIsPermaLink    = null;
  17050.         
  17051.         oAttributes        = XMLGUIDNode.attributes;
  17052.         oAttIsPermaLink    = oAttributes.getNamedItem(FeedParserConsts_CT2384137.RSS.ISPERMALINK);
  17053.     
  17054.         if(!oAttIsPermaLink || oAttIsPermaLink.nodeValue.toLowerCase() == FeedParserConsts_CT2384137.RSS.TRUE)
  17055.         {
  17056.             strLink = EBXML_CT2384137.GetXmlNodeValue(XMLGUIDNode);
  17057.         }
  17058.         
  17059.         return strLink;
  17060.     };
  17061.     
  17062.     this.Init(XMLDoc);
  17063. }
  17064.  
  17065. var EBFeedUIManager_CT2384137 =
  17066. {
  17067.     currentFeedPopup: null,
  17068.     currentMultiFeedPopup: null,
  17069.     currentMultiFeedPopupCompId: null,
  17070.  
  17071.     onFeedShowing: function(e, strCompID, iMultiIndex) {
  17072.         if (e.eventPhase != 2) return false;
  17073.  
  17074.         this.currentFeedPopup = e.target;
  17075.         var oFeedComponent = (iMultiIndex == -1) ?
  17076.             EBComponentsManager_CT2384137.GetComponentByCompID(strCompID) :
  17077.             EBComponentsManager_CT2384137.GetComponentByCompID(strCompID).FeedComponents[iMultiIndex];
  17078.  
  17079.         //close other feed dialog, it can remain opened in sertain conditions
  17080.         this._closeOtherFeedPopups(e.target);
  17081.  
  17082.         if (oFeedComponent)
  17083.             e.target.init(oFeedComponent); //event.target = feed menupopup
  17084.  
  17085.         return true;
  17086.     },
  17087.  
  17088.     onFeedsMenuShowing: function(e, strCompID, bIsTwitter) {
  17089.         if (!e.target.hasAttribute("eb-main-feed-popup")) return true;
  17090.         if (e.eventPhase != 2) return false;
  17091.  
  17092.         var oComponent = EBComponentsManager_CT2384137.GetComponentByCompID(strCompID);
  17093.         oComponent.createFeedsMenu(e.target);
  17094.  
  17095.         this.currentMultiFeedPopup = e.target;
  17096.         this.currentMultiFeedPopupCompId = strCompID;
  17097.  
  17098.         //usage
  17099.         if (bIsTwitter)
  17100.             EBUsageTwitter_CT2384137.OnOpenMultiRss();
  17101.         else
  17102.             EBUsageRss_CT2384137.OnOpenMultiRss();
  17103.  
  17104.         return true;
  17105.     },
  17106.  
  17107.     onFeedsMenuShown: function(e, strCompID) {
  17108.         if (!e.target.hasAttribute("eb-main-feed-popup")) return true;
  17109.         if (e.eventPhase != 2) return false;
  17110.  
  17111.         var oComponent = EBComponentsManager_CT2384137.GetComponentByCompID(strCompID);
  17112.         oComponent.updateStarsOnFeedsMenu(e.target);
  17113.     },
  17114.  
  17115.     onFeedMenuHiding: function(e, strCompID, bIsTwitter) {
  17116.         if (!e.target.hasAttribute("eb-main-feed-popup")) return true;
  17117.         if (e.eventPhase != 2) return false;
  17118.  
  17119.         var oComponent = EBComponentsManager_CT2384137.GetComponentByCompID(strCompID);
  17120.         oComponent.emptyFeedsMenu(e.target);
  17121.  
  17122.         this.currentMultiFeedPopup = null;
  17123.         this.currentMultiFeedPopupCompId = null;
  17124.  
  17125.         if (bIsTwitter)
  17126.             EBUsageTwitter_CT2384137.OnCloseMultiRss(strCompID, oComponent.ComponentItem.CompType);
  17127.         else
  17128.             EBUsageRss_CT2384137.OnCloseMultiRss(strCompID, oComponent.ComponentItem.CompType);
  17129.  
  17130.         return true;
  17131.     },
  17132.  
  17133.     _closeOtherFeedPopups: function(currentPopup) {
  17134.         var arrPopups = document.getElementsByTagName("menupopup");
  17135.         var xulPopup = null;
  17136.  
  17137.         for (var i = 0; i < arrPopups.length; i++) {
  17138.             xulPopup = arrPopups[i];
  17139.             if ((xulPopup.className.indexOf("ebFeedDialogPopup") != -1 || xulPopup.className.indexOf("ebTwitterDialogPopup") != -1) &&
  17140.                 xulPopup.id != currentPopup.id &&
  17141.                 xulPopup.closeMe)
  17142.  
  17143.                 xulPopup.closeMe(false);
  17144.         }
  17145.     },
  17146.  
  17147.     //this funcion will close feed popup and multi feed menu if opened
  17148.     closeFeed: function(xulPopup) {
  17149.         if (!xulPopup.closeMe) return;
  17150.  
  17151.         xulPopup.closeMe(true);
  17152.         var xulParent = xulPopup.parentNode.parentNode;
  17153.         //close multi feed menupopup (multi rss)
  17154.         if (xulParent.tagName == "menupopup") {
  17155.             xulParent.hidePopup();
  17156.             //hide chevron (if in chevron)
  17157.             if (xulParent.parentNode && xulParent.parentNode.parentNode && xulParent.parentNode.parentNode.hidePopup)
  17158.                 xulParent.parentNode.parentNode.hidePopup();
  17159.         }
  17160.     },
  17161.  
  17162.     updateMultiFeedMenu: function(multiFeedId, menupopup, feedIndex) {
  17163.         if (!menupopup) return;
  17164.  
  17165.         var oFeedComponent = EBComponentsManager_CT2384137.GetComponentByCompID(multiFeedId);
  17166.         oFeedComponent.updateFeedCountInMenu(menupopup, feedIndex);
  17167.     },
  17168.  
  17169.     removeStarOnMultiRssMenu: function(xulFeedPopup, strCompID) {
  17170.         var xulMenu = xulFeedPopup.parentNode;
  17171.         var oComponent = EBComponentsManager_CT2384137.GetComponentByCompID(strCompID);
  17172.         oComponent.removeStarOnMenu(xulMenu, xulMenu.parentNode);
  17173.     },
  17174.  
  17175.     //update the count in multifeed menu popup if open for specific multifeed
  17176.     updateMultifeedCountInMenu: function(uniqueCompId, iFeedIndex) {
  17177.         if (!this.currentFeedPopup || this.currentMultiFeedPopupCompId != uniqueCompId) return;
  17178.  
  17179.         this.updateMultiFeedMenu(uniqueCompId, this.currentMultiFeedPopup, iFeedIndex);
  17180.     },
  17181.  
  17182.     Context_OnCommandShowInNewWindow: function(event, bIsTab) {
  17183.         this.currentFeedPopup.manager.xulContext.style.display = "none";
  17184.         this.currentFeedPopup.manager.OnCommandShowInNewWindow(event, bIsTab);
  17185.     },
  17186.  
  17187.     Context_OnCommandDeleteMessage: function(event) {
  17188.         this.currentFeedPopup.manager.xulContext.style.display = "none";
  17189.         this.currentFeedPopup.manager.OnCommandDeleteMessage(event);
  17190.     }
  17191. };
  17192. var EBIniFile_CT2384137 =
  17193. {
  17194.     filename: 'setup.ini',
  17195.  
  17196.     getFile: function() {
  17197.         var extPath = EBIOManager_CT2384137.GetExtentionPath(EBGlobalConsts_CT2384137.GUID);
  17198.         try {
  17199.             var oFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  17200.             oFile.initWithPath(extPath);
  17201.             oFile.appendRelativePath(this.filename);
  17202.             if (oFile.exists())
  17203.                 return oFile;
  17204.             else
  17205.                 return null;
  17206.         }
  17207.         catch (ex) {
  17208.             return null;
  17209.         }
  17210.     },
  17211.  
  17212.     getParamsFromFile: function() {
  17213.         var oFile = this.getFile();
  17214.         if (!oFile) return null;
  17215.  
  17216.         var strText = EBFileIO_CT2384137.read(oFile, EBGlobalConsts_CT2384137.DefaultCharset);
  17217.         var arrLines = strText.split('\n');
  17218.         var oParams = new ToolbarParams_CT2384137();
  17219.  
  17220.         for (var i = 0; i < arrLines.length; i++)
  17221.             this.fillParam(arrLines[i], oParams);
  17222.  
  17223.         return oParams;
  17224.     },
  17225.  
  17226.     fillParam: function(strLine, oParams) {
  17227.         if (!strLine || strLine.indexOf("=") == -1) return;
  17228.         var paramName = "";
  17229.         var paramValue = "";
  17230.         try {
  17231.             paramName = strLine.split('=')[0];
  17232.             paramValue = (strLine.match(/=(.*)/))[1];
  17233.         } catch (e) { return; }
  17234.  
  17235.         switch (paramName) {
  17236.             case '_SET_DEFAULT_SEARCH_':
  17237.                 oParams.FFSearchIsDefault = EBGlobalManager_CT2384137.StringToBoolean(paramValue);
  17238.                 oParams.FFSearchIsChecked = EBGlobalManager_CT2384137.StringToBoolean(paramValue);
  17239.                 break;
  17240.             case '_DEFAULT_SEARCH_DISPLAY_NAME_': oParams.FFSearchCaption = paramValue; break;
  17241.             case '_DEFAULT_SEARCH_URL_':
  17242.                 oParams.FFSearchUrl = paramValue;
  17243.                 oParams.FFAddressBarSearchUrl = paramValue;
  17244.                 break;
  17245.             case '_START_PAGE_': oParams.HomepageIsSet = EBGlobalManager_CT2384137.StringToBoolean(paramValue); break;
  17246.             case '_SETUP_FIX_404_CHK_BOX_VAL_': oParams.Fix404IsChecked = EBGlobalManager_CT2384137.StringToBoolean(paramValue); break;
  17247.             case '_CT_ID_': oParams.SelectedCTID = paramValue; break;
  17248.             case '_OPEN_THANKYOU_PAGE_': oParams.IsOpenThankYouPage = EBGlobalManager_CT2384137.StringToBoolean(paramValue); break;
  17249.             case '_OPEN_UNINSTALL_PAGE_': oParams.IsOpenUninstallPage = EBGlobalManager_CT2384137.StringToBoolean(paramValue); break;
  17250.             case '_OPEN_WELCOME_DIALOG_': oParams.IsOpenWelcomeDialog = EBGlobalManager_CT2384137.StringToBoolean(paramValue); break;
  17251.             case 'true': oParams.SearchFromAddress = EBGlobalManager_CT2384137.StringToBoolean(paramValue); break;
  17252.         }
  17253.     }
  17254. };
  17255. function ToolbarParams_CT2384137() {
  17256.     this.FFSearchIsChecked = true; //boolean
  17257.     this.FFSearchIsDefault = null; //boolean
  17258.     this.FFSearchCaption = '';
  17259.     this.FFSearchUrl = '';
  17260.     this.FFAddressBarSearchUrl = '';
  17261.     this.HomepageIsSet = null; //boolean
  17262.     this.Fix404IsChecked = null; //boolean
  17263.     this.SelectedCTID = '';
  17264.     this.IsOpenThankYouPage = true; //boolean
  17265.     this.IsOpenUninstallPage = null; //boolean
  17266.     this.IsOpenWelcomeDialog = null; //boolean
  17267.     this.SearchFromAddress = null; //boolean
  17268. }
  17269.  
  17270. var EBInitParams_CT2384137 =
  17271. {
  17272.     engineName: 'Search Powered by Google',
  17273.     srcFileName: 'conduit.src',
  17274.     xmlFileName: 'conduit.xml',
  17275.     imgFileName: 'conduit.gif',
  17276.     engineURL: 'http://search.conduit.com/ResultsExt.aspx?ctid=CT2384137&SearchSource=3&q={searchTerms}',
  17277.     homepageUrl: 'http://search.conduit.com/?ctid=CT2384137&SearchSource=13',
  17278.     homepageText: '',
  17279.     prefHomePage: 'browser.startup.homepage',
  17280.     homepageIsChecked: true,
  17281.     FFSearchIsDefault: true,
  17282.     WelcomeDialogMode: "full",
  17283.  
  17284.     settingsReady: false,
  17285.     languagePackReady: false,
  17286.     initDone: false,
  17287.     oParams: null,
  17288.  
  17289.     isAllInitDone: function() {
  17290.         var isInit = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.FirstTime);
  17291.         var isInitSearchFromAddressBar = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarIsInit);
  17292.         var isFF3FirstTime = this.isFF3FirstTime();
  17293.  
  17294.         if (isInit && isFF3FirstTime && isInitSearchFromAddressBar)
  17295.             return true;
  17296.         else
  17297.             return false;
  17298.     },
  17299.  
  17300.     initFromSettings: function() {
  17301.         if (this.isAllInitDone()) return;
  17302.         this.settingsReady = true;
  17303.  
  17304.         this.oParams = EBIniFile_CT2384137.getParamsFromFile();
  17305.  
  17306.         if (this.oParams) {
  17307.             this.setIsOpenThankYouPage(this.oParams.IsOpenThankYouPage);
  17308.             //if show welcome dialog is set to false there is no need to wait for Language pack
  17309.             if (!this.oParams.IsOpenWelcomeDialog) {
  17310.                 this._init();
  17311.                 return;
  17312.             }
  17313.         }
  17314.  
  17315.         if (this.languagePackReady)
  17316.             this._init();
  17317.         else {
  17318.             var that = this;
  17319.             var oTimeout = function() {
  17320.                 EBInitParams_CT2384137._init.call(that);
  17321.             };
  17322.  
  17323.             setTimeout(oTimeout, 15000);
  17324.         }
  17325.     },
  17326.  
  17327.     initFromLP: function() {
  17328.         if (this.isAllInitDone()) return;
  17329.         this.languagePackReady = true;
  17330.  
  17331.         if (this.settingsReady) this._init();
  17332.     },
  17333.  
  17334.     _init: function() {
  17335.         if (this.initDone) return;
  17336.         this.initDone = true;
  17337.  
  17338.         var isInit = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.FirstTime);
  17339.         var isInitSearchFromAddressBar = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarIsInit);
  17340.         var isFF3FirstTime = this.isFF3FirstTime();
  17341.  
  17342.         if (isInit && isFF3FirstTime && isInitSearchFromAddressBar)
  17343.             return;
  17344.  
  17345.         //set not to init again search from address bar
  17346.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.SearchFromAddressBarIsInit, true);
  17347.  
  17348.         if (!this.oParams)
  17349.             this.oParams = new ToolbarParams_CT2384137();
  17350.  
  17351.         var bIsRebuildSearchEngine = (isInit) ? false : true;
  17352.         this.addDefaultsToParams(this.oParams, bIsRebuildSearchEngine);
  17353.  
  17354.         //set installed date to prefs
  17355.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.InstalledDate, Date());
  17356.         //init all
  17357.         if (bIsRebuildSearchEngine) {
  17358.             this.applyParams(this.oParams, this.oParams.IsOpenWelcomeDialog);
  17359.             if (this.oParams.IsOpenWelcomeDialog)
  17360.                 EBWelcomeDialog_CT2384137.OpenWelcomeDialog(this.oParams);
  17361.             else {
  17362.                 //first time login
  17363.                 oToolbarManager_CT2384137.requestLogin();
  17364.                 //set not to init again
  17365.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.FirstTime, true);
  17366.                 if (this.oParams.SelectedCTID == EBGlobalConsts_CT2384137.ToolbarCTID) {
  17367.                     if (!EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.CTID))
  17368.                         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CTID, EBGlobalConsts_CT2384137.ToolbarCTID);
  17369.                     EBToolbarManager_CT2384137.broadcastRebuild(oToolbar_CT2384137.toolbarDataParsing.observerData.settings);
  17370.                 }
  17371.                 else
  17372.                     oToolbar_CT2384137.toolbar.switchToCommunity(EBGlobalConsts_CT2384137.ToolbarCTID,
  17373.                                                     EBGlobalConsts_CT2384137.ToolbarCTID,
  17374.                                                     this.oParams.SelectedCTID);
  17375.             }
  17376.         }
  17377.         //init only the search from address bar
  17378.         else if (!isInitSearchFromAddressBar) {
  17379.             EBSearchFromAddressBar_CT2384137.firstTime(this.oParams.FFAddressBarSearchUrl, oParams.SearchFromAddress);
  17380.         }
  17381.     },
  17382.  
  17383.     addDefaultsToParams: function(oParams, bIsRebuildSearchEngine) {
  17384.         var bIsRebuildEngineXml = false;
  17385.         if (oParams.FFSearchIsDefault == null)
  17386.             oParams.FFSearchIsDefault = this.FFSearchIsDefault;
  17387.  
  17388.         if (!oParams.FFSearchCaption)
  17389.             oParams.FFSearchCaption = this.engineName;
  17390.         else
  17391.             bIsRebuildEngineXml = true;
  17392.  
  17393.         if (!oParams.FFSearchUrl) {
  17394.             oParams.FFSearchUrl = this.engineURL;
  17395.             oParams.FFAddressBarSearchUrl = EBSearchFromAddressBar_CT2384137.addressBarEngineURL;
  17396.         }
  17397.         else
  17398.             bIsRebuildEngineXml = true;
  17399.  
  17400.         if (oParams.HomepageIsSet == null)
  17401.             oParams.HomepageIsSet = this.homepageIsChecked;
  17402.         if (oParams.Fix404IsChecked == null)
  17403.             oParams.Fix404IsChecked = EBGlobalConsts_CT2384137.FixPageNotFoundErrorsChecked;
  17404.         if (!oParams.SelectedCTID)
  17405.             oParams.SelectedCTID = EBGlobalConsts_CT2384137.ToolbarCTID;
  17406.         if (oParams.IsOpenUninstallPage == null)
  17407.             oParams.IsOpenUninstallPage = EBGlobalConsts_CT2384137.ShowUninstallPage;
  17408.         if (oParams.SearchFromAddress == null)
  17409.             oParams.SearchFromAddress = oParams.FFSearchIsDefault;
  17410.         if (oParams.IsOpenWelcomeDialog == null)
  17411.             oParams.IsOpenWelcomeDialog = (EBInitParams_CT2384137.WelcomeDialogMode == "none") ? false : true;
  17412.  
  17413.  
  17414.         if (bIsRebuildEngineXml && bIsRebuildEngineXml)
  17415.             this.rebuildEngineXml(oParams.FFSearchCaption, oParams.FFSearchUrl);
  17416.     },
  17417.  
  17418.     rebuildEngineXml: function(strCaption, strSearchUrl) {
  17419.         var extPath = EBIOManager_CT2384137.GetExtentionPath(EBGlobalConsts_CT2384137.GUID);
  17420.         try {
  17421.             var oFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  17422.             oFile.initWithPath(extPath);
  17423.             oFile.appendRelativePath('searchplugin');
  17424.             oFile.appendRelativePath('conduit.xml');
  17425.             if (!oFile) return;
  17426.  
  17427.             var strSearchXml = EBFileIO_CT2384137.read(oFile);
  17428.             var xmlSearch = EBXML_CT2384137.GetXmlDocument(strSearchXml);
  17429.             var xmlShortName = EBXML_CT2384137.SelectSingleNode(xmlSearch, "ShortName");
  17430.             var xmlDescription = EBXML_CT2384137.SelectSingleNode(xmlSearch, "Description");
  17431.             var xmlUrl = EBXML_CT2384137.SelectSingleNode(xmlSearch, "Url");
  17432.             var xmlSeachForm = EBXML_CT2384137.SelectSingleNode(xmlSearch, "SearchForm");
  17433.  
  17434.             xmlShortName.firstChild.nodeValue = strCaption;
  17435.             xmlDescription.firstChild.nodeValue = strCaption;
  17436.             xmlSeachForm.firstChild.nodeValue = strSearchUrl;
  17437.             xmlUrl.setAttribute("template", strSearchUrl);
  17438.  
  17439.             strSearchXml = EBXML_CT2384137.GetStringXml(xmlSearch);
  17440.             EBFileIO_CT2384137.write(oFile, strSearchXml, null, EBGlobalConsts_CT2384137.DefaultCharset);
  17441.         }
  17442.         catch (ex) {
  17443.         }
  17444.     },
  17445.  
  17446.     applyParams: function(oParams, bIsUserInput) {
  17447.         this.setIsOpenThankYouPage(oParams.IsOpenThankYouPage);
  17448.         this.setIsOpenUninstallPage(oParams.IsOpenUninstallPage);
  17449.  
  17450.         if (!bIsUserInput) {
  17451.             this.SetEngine(oParams.FFSearchIsChecked, oParams.FFSearchIsDefault, oParams);
  17452.             if (oParams.HomepageIsSet) this.SetHomepage();
  17453.             this.setFix404(oParams.Fix404IsChecked);
  17454.             EBSearchFromAddressBar_CT2384137.firstTime(oParams.FFAddressBarSearchUrl, oParams.SearchFromAddress);
  17455.         }
  17456.     },
  17457.  
  17458.     isFF3FirstTime: function() {
  17459.         if (!EBGlobalManager_CT2384137.IsFirefox3() || EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.FirstTimeFF3))
  17460.             return true;
  17461.  
  17462.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.FirstTimeFF3, true);
  17463.  
  17464.         var sep = EBDirIO_CT2384137.sep;
  17465.  
  17466.         var plugDir = EBIOManager_CT2384137.GetSearchPluginsDir();
  17467.         var plug2Dir = this.getProfileSearchPluginsFolder();
  17468.         var extPath = EBIOManager_CT2384137.GetExtentionPath(EBGlobalConsts_CT2384137.GUID);
  17469.  
  17470.         var engineSrc = EBFileIO_CT2384137.open(plugDir.path);
  17471.         engineSrc.appendRelativePath(this.xmlFileName);
  17472.         var engine2Src = EBFileIO_CT2384137.open(plug2Dir);
  17473.         engine2Src.appendRelativePath(this.xmlFileName);
  17474.  
  17475.         try {
  17476.             if (engineSrc.exists() || engine2Src.exists())
  17477.                 return true;
  17478.             else
  17479.                 return false;
  17480.         }
  17481.         catch (e) {
  17482.             return true;
  17483.         }
  17484.     },
  17485.  
  17486.     copyFile: function(fileObj, destdir, filename) {
  17487.         // get a component for the directory to copy to
  17488.         var aDir = Components.classes["@mozilla.org/file/local;1"]
  17489.             .createInstance(Components.interfaces.nsILocalFile);
  17490.         if (!aDir) return false;
  17491.  
  17492.         // next, assign URLs to the file components
  17493.         aDir.initWithPath(destdir);
  17494.         aDir.appendRelativePath(filename);
  17495.  
  17496.         try {
  17497.             aDir.remove(false);
  17498.         }
  17499.         catch (ex) { }
  17500.  
  17501.         aDir.initWithPath(destdir);
  17502.  
  17503.         // finally, copy the file, without renaming it
  17504.         try {
  17505.             if (aDir.isWritable())
  17506.                 fileObj.copyTo(aDir, null);
  17507.             else
  17508.                 return false;
  17509.         }
  17510.         catch (ex) {
  17511.             EBLog(ex);
  17512.         }
  17513.  
  17514.         return true;
  17515.     },
  17516.  
  17517.     CreatePluginsFolder: function(strPath) {
  17518.         var oDir = EBDirIO_CT2384137.open(strPath);
  17519.         if (!oDir.exists())
  17520.             EBDirIO_CT2384137.create(oDir);
  17521.     },
  17522.  
  17523.     getProfileSearchPluginsFolder: function() {
  17524.         var plugDir = EBIOManager_CT2384137.GetPrefsDir();
  17525.         var strDestPath = plugDir.path + EBDirIO_CT2384137.sep + "searchplugins";
  17526.         return strDestPath;
  17527.     },
  17528.  
  17529.     removeHiddenSearch: function() {
  17530.         try {
  17531.             var prefDir = EBIOManager_CT2384137.GetPrefsDir();
  17532.  
  17533.             //remove from .sqlite file
  17534.             var searchSqlite = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  17535.             searchSqlite.initWithPath(prefDir.path);
  17536.             searchSqlite.appendRelativePath("search.sqlite");
  17537.             if (searchSqlite.exists()) {
  17538.                 var storageService = Components.classes["@mozilla.org/storage/service;1"]
  17539.                                     .getService(Components.interfaces.mozIStorageService);
  17540.                 var dbConn = storageService.openDatabase(searchSqlite);
  17541.                 dbConn.executeSimpleSQL("UPDATE engine_data SET name='order' WHERE (engineid='[profile]/conduit.xml' OR engineid='[pp]/conduit.xml') AND name='hidden'");
  17542.                 dbConn.close();
  17543.             }
  17544.  
  17545.             //remove from json file.
  17546.             var searchJson = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  17547.             searchJson.initWithPath(prefDir.path);
  17548.             searchJson.appendRelativePath("search.json");
  17549.             if (searchJson.exists()) {
  17550.                 var strSearchJson = EBFileIO_CT2384137.read(searchJson, "UTF-8");
  17551.                 var objSearchEngines = JSON.parse(strSearchJson);
  17552.                 var engines = null;
  17553.                 var conduitEngine = null;
  17554.                 for (var i in objSearchEngines.directories) {
  17555.                     engines = objSearchEngines.directories[i].engines;
  17556.                     for (var j = 0; j < engines.length; j++) {
  17557.                         if (engines[j].filePath.indexOf("conduit.xml") != -1) {
  17558.                             conduitEngine = engines[j];
  17559.                             break;
  17560.                         }
  17561.                     }
  17562.  
  17563.                     if (conduitEngine) break;
  17564.                 }
  17565.  
  17566.                 if (!conduitEngine) return;
  17567.  
  17568.                 delete conduitEngine.hidden;
  17569.                 strSearchJson = JSON.stringify(objSearchEngines);
  17570.                 EBFileIO_CT2384137.write(searchJson, searchJson, null, "UTF-8");
  17571.             }
  17572.         }
  17573.         catch (ex) {
  17574.             EBLog(ex);
  17575.         }
  17576.     },
  17577.  
  17578.     SetEngine: function(isAddEngine, isDefaultEngine, oParams) {
  17579.         if (!isAddEngine) return;
  17580.  
  17581.         var win = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  17582.  
  17583.         if (win.document == null) { return }
  17584.  
  17585.         var searchbar = win.document.getElementById("searchbar");
  17586.         var sep = EBDirIO_CT2384137.sep;
  17587.  
  17588.         var strDestPath = this.getProfileSearchPluginsFolder();
  17589.         this.CreatePluginsFolder(strDestPath);
  17590.  
  17591.         var extPath = EBIOManager_CT2384137.GetExtentionPath(EBGlobalConsts_CT2384137.GUID);
  17592.  
  17593.         var engineSrc = EBFileIO_CT2384137.open(extPath + sep + "searchplugin");
  17594.         var engineGif = EBFileIO_CT2384137.open(extPath + sep + "searchplugin");
  17595.  
  17596.         var bIsSuccess = false;
  17597.  
  17598.         try {
  17599.             // for FF 1.5.* copy plugin.src and plugin.ico file
  17600.             if (searchbar != null && searchbar.attributes["searchengine"] != null) {
  17601.                 engineSrc.appendRelativePath(this.srcFileName);
  17602.                 engineGif.appendRelativePath(this.imgFileName);
  17603.                 bIsSuccess = this.copyFile(engineSrc, strDestPath, this.srcFileName)
  17604.                 bIsSuccess = this.copyFile(engineGif, strDestPath, this.imgFileName)
  17605.             }
  17606.             // for FF 2.0 copy plugin.xml file
  17607.             else {
  17608.                 engineSrc.appendRelativePath(this.xmlFileName);
  17609.                 engineGif.appendRelativePath(this.imgFileName);
  17610.                 bIsSuccess = this.copyFile(engineSrc, strDestPath, this.xmlFileName);
  17611.                 this.removeHiddenSearch();
  17612.             }
  17613.         }
  17614.         catch (ex) {
  17615.             EBLog(ex);
  17616.         }
  17617.  
  17618.         if (!isDefaultEngine)
  17619.             return;
  17620.  
  17621.         if (searchbar != null) {    //for FF prior to 2.0
  17622.             try {
  17623.                 if (searchbar.attributes["searchengine"] != null) {
  17624.                     searchbar.setAttribute("searchengine", "engine://" + escape(engineSrc.path));
  17625.                     searchbar.setAttribute("src", "file:///" + escape(engineGif.path));
  17626.                     bIsSuccess = true;
  17627.                 }
  17628.             }
  17629.             catch (ex) {
  17630.                 EBLog(ex);
  17631.             }
  17632.         }
  17633.  
  17634.         //set to be default
  17635.         if (bIsSuccess) {
  17636.             EBPreferenceService_CT2384137.SetPref("browser.search.defaultthis.engineName", oParams.FFSearchCaption);
  17637.             EBPreferenceService_CT2384137.SetPref("browser.search.defaulturl", oParams.FFSearchUrl);
  17638.             EBPreferenceService_CT2384137.SetPref("browser.search.selectedEngine", oParams.FFSearchCaption)
  17639.         }
  17640.     },
  17641.  
  17642.     setFix404: function(bValue) {
  17643.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.FixPageNotFoundErrors, bValue);
  17644.     },
  17645.  
  17646.     setUsage: function(bValue) {
  17647.         EBUsageManager_CT2384137.enable = bValue;
  17648.     },
  17649.  
  17650.     setIsOpenThankYouPage: function(bValue) {
  17651.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.IsOpenThankYouPage, bValue);
  17652.     },
  17653.  
  17654.     setIsOpenUninstallPage: function(bValue) {
  17655.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.IsOpenUninstallPage, bValue);
  17656.     },
  17657.  
  17658.     SetHomepage: function() {
  17659.         //save last home page.
  17660.         if (!EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.SavedHomepage)) {
  17661.             var strHomepage = EBPreferenceService_CT2384137.GetPref(this.prefHomePage);
  17662.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.SavedHomepage, strHomepage);
  17663.         }
  17664.  
  17665.         var strHomePage = this.homepageUrl;
  17666.         EBPreferenceService_CT2384137.SetPref(this.prefHomePage, strHomePage);
  17667.     },
  17668.  
  17669.     ResetHomepage: function() {
  17670.         var strHomePage = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.SavedHomepage);
  17671.         EBPreferenceService_CT2384137.SetPref(this.prefHomePage, strHomePage);
  17672.     }
  17673. };
  17674. var EBWelcomeDialog_CT2384137 =
  17675. {
  17676.     dialogName: "welcome.xul",
  17677.     dialogRtlName: "welcomeRTL.xul",
  17678.     dialogLinuxMacName: "welcomeMacLinux.xul",
  17679.  
  17680.     btnFinish: null,
  17681.     lblBtnAbort: null,
  17682.     dscTitle: null,
  17683.     dscTitleWelcomeOnly: null,
  17684.     chkEmail: null,
  17685.     chkWeather: null,
  17686.     chkRadio: null,
  17687.     chkFacebook: null,
  17688.     dscSettingsTitle: null,
  17689.     chkWebSearch: null,
  17690.     chkHomePage: null,
  17691.     txtBottom: null,
  17692.     aEula: null,
  17693.     txtAnd: null,
  17694.     aPrivacy: null,
  17695.     boxPersonalComponents: null,
  17696.     boxSearchAndHomepage: null,
  17697.     boxWelcomeOnly: null,
  17698.     htmlTruste: null,
  17699.  
  17700.     _txtUninstallTitle: "",
  17701.     _txtUninstallBody: "",
  17702.     _isSingleComponent: false,
  17703.     _isPersonalComponents: true,
  17704.     params: null,
  17705.  
  17706.     dialog: null,
  17707.     oWindow: null,
  17708.     bDisplayTruste: false,
  17709.  
  17710.     OpenWelcomeDialog: function(oParams) {
  17711.         var strWelcomeChromePath = EBGlobalConsts_CT2384137.ChromeContentPath;
  17712.         var strWelcomeDialogName = "Welcome";
  17713.         var oMainMenu = EBComponentsManager_CT2384137.GetMainMenuComponent();
  17714.         var strPos, xulMainManuBox, x, y;
  17715.  
  17716.         if (!EBGlobalManager_CT2384137.IsWindowsPlatform()) {
  17717.             strWelcomeChromePath += this.dialogLinuxMacName;
  17718.             strPos = ",centerscreen";
  17719.         }
  17720.         else if (!EBActionManager_CT2384137.IsToolbarRTL()) {
  17721.             strWelcomeChromePath += this.dialogName;
  17722.             //find open position
  17723.             if (oMainMenu && oMainMenu.XULElement) {
  17724.                 xulMainManuBox = oMainMenu.XULElement.boxObject;
  17725.                 x = xulMainManuBox.screenX + (xulMainManuBox.width / 2);
  17726.                 y = xulMainManuBox.screenY + xulMainManuBox.height;
  17727.                 strPos = ",screenX=" + x + ",screenY=" + y;
  17728.             }
  17729.             else
  17730.                 strPos = ",centerscreen";
  17731.         }
  17732.         else {
  17733.             strWelcomeChromePath += this.dialogRtlName;
  17734.             //find open position
  17735.             if (oMainMenu && oMainMenu.XULElement) {
  17736.                 xulMainManuBox = oMainMenu.XULElement.boxObject;
  17737.                 x = xulMainManuBox.screenX + (xulMainManuBox.width / 2) - 450;
  17738.                 y = xulMainManuBox.screenY + xulMainManuBox.height;
  17739.                 strPos = ",screenX=" + x + ",screenY=" + y;
  17740.             }
  17741.             else
  17742.                 strPos = ",centerscreen";
  17743.         }
  17744.  
  17745.         window.openDialog(strWelcomeChromePath,
  17746.                             strWelcomeDialogName,
  17747.                             'chrome,modal,chrome,resizable=no,titlebar=yes' + strPos, oParams)
  17748.     },
  17749.  
  17750.     onload: function(event) {
  17751.         this._setLocalUIVars(event);
  17752.         this._initUI();
  17753.  
  17754.         if (EBInitParams_CT2384137.WelcomeDialogMode == "full")
  17755.             this._fillUIForFullDialog();
  17756.         else
  17757.             this._fillUIForWelcomeOnlyDialog();
  17758.         this._applyLP();
  17759.     },
  17760.  
  17761.     onunload: function() {
  17762.  
  17763.     },
  17764.  
  17765.     onclickUninstall: function() {
  17766.         if (EBGlobalManager_CT2384137.Confirm(window, this._txtUninstallTitle, this._txtUninstallBody)) {
  17767.             var objExtManager = Components.classes["@mozilla.org/extensions/manager;1"]
  17768.                                     .getService(Components.interfaces.nsIExtensionManager);
  17769.  
  17770.             objExtManager.uninstallItem(EBGlobalConsts_CT2384137.GUID);
  17771.             window.close();
  17772.         }
  17773.     },
  17774.  
  17775.     onclickFinish: function() {
  17776.         if (this._isPersonalComponents) {
  17777.             if (this.chkEmail.style.display != "none") {
  17778.                 var emailNotifierItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getEmailNotifierItem();
  17779.                 if (emailNotifierItem)
  17780.                     emailNotifierItem.setShowState(this.chkEmail.checked);
  17781.             }
  17782.  
  17783.             if (this.chkWeather.style.display != "none") {
  17784.                 var weatherItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getWeatherItem();
  17785.                 if (weatherItem)
  17786.                     weatherItem.setShowState(this.chkWeather.checked);
  17787.             }
  17788.  
  17789.             if (this.chkRadio.style.display != "none") {
  17790.                 var radioItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getRadioItem();
  17791.                 if (radioItem)
  17792.                     radioItem.setShowState(this.chkRadio.checked);
  17793.             }
  17794.  
  17795.             if (this.chkFacebook.style.display != "none") {
  17796.                 var facebookItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getFacebookItem();
  17797.                 if (facebookItem)
  17798.                     facebookItem.setShowState(this.chkFacebook.checked);
  17799.             }
  17800.         }
  17801.  
  17802.         if (this.chkHomePage.checked)
  17803.             EBInitParams_CT2384137.SetHomepage();
  17804.  
  17805.         if (this.chkWebSearch.checked)
  17806.             EBInitParams_CT2384137.SetEngine(true, true, this.params);
  17807.  
  17808.         EBSearchFromAddressBar_CT2384137.firstTime(this.params.FFAddressBarSearchUrl, this.chkWebSearch.checked);
  17809.  
  17810.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.FirstTime, true);
  17811.         if (this.params.SelectedCTID == EBGlobalConsts_CT2384137.ToolbarCTID) {
  17812.             if (!EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.CTID))
  17813.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CTID, EBGlobalConsts_CT2384137.ToolbarCTID);
  17814.             this.oWindow.EBToolbarManager_CT2384137.broadcastRebuild(this.oWindow.oToolbar_CT2384137.toolbarDataParsing.observerData.settings);
  17815.         }
  17816.         else
  17817.             this.oWindow.oToolbar_CT2384137.toolbar.switchToCommunity(EBGlobalConsts_CT2384137.ToolbarCTID,
  17818.                                                     EBGlobalConsts_CT2384137.ToolbarCTID,
  17819.                                                     this.params.SelectedCTID);
  17820.  
  17821.         var oManager = this.oWindow.oToolbarManager_CT2384137;
  17822.         var asyncReqLogin = function() {
  17823.             oManager.requestLogin();
  17824.         }
  17825.         this.oWindow.setTimeout(asyncReqLogin, 200);
  17826.         window.close();
  17827.     },
  17828.  
  17829.     onClickTruste: function() {
  17830.         var strTrusteUrl = this.oWindow.EBActionManager_CT2384137.GetTrusteLinkUrl();
  17831.         EBActionManager_CT2384137._openUrlWindow("DIALOG", strTrusteUrl);
  17832.     },
  17833.  
  17834.     _setLocalUIVars: function(event) {
  17835.         this.btnFinish = document.getElementById("btnFinish");
  17836.         this.lblBtnAbort = document.getElementById("lblBtnAbort");
  17837.         this.dscTitle = document.getElementById("dscTitle");
  17838.         this.dscTitleWelcomeOnly = document.getElementById("dscTitleWelcomeOnly");
  17839.         this.chkEmail = document.getElementById("chkEmail");
  17840.         this.chkWeather = document.getElementById("chkWeather");
  17841.         this.chkRadio = document.getElementById("chkRadio");
  17842.         this.chkFacebook = document.getElementById("chkFacebook");
  17843.         this.dscSettingsTitle = document.getElementById("dscSettingsTitle");
  17844.         this.chkWebSearch = document.getElementById("chkWebSearch");
  17845.         this.chkHomePage = document.getElementById("chkHomePage");
  17846.         this.txtBottom = document.getElementById("txtBottom");
  17847.         this.aEula = document.getElementById("aEula");
  17848.         this.txtAnd = document.getElementById("txtAnd");
  17849.         this.aPrivacy = document.getElementById("aPrivacy");
  17850.         this.boxPersonalComponents = document.getElementById("boxPersonalComponents");
  17851.         this.boxSearchAndHomepage = document.getElementById("boxSearchAndHomepage");
  17852.         this.boxWelcomeOnly = document.getElementById("boxWelcomeOnly");
  17853.         this.htmlTruste = document.getElementById("htmlTruste");
  17854.  
  17855.         this.dialog = event.target;
  17856.         this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  17857.         this.params = window.arguments[0];
  17858.     },
  17859.  
  17860.     _initUI: function() {
  17861.         if (!this.bDisplayTruste)
  17862.             this.htmlTruste.style.display = "none";
  17863.     },
  17864.  
  17865.     _fillUIForWelcomeOnlyDialog: function() {
  17866.         this.boxPersonalComponents.style.display = "none";
  17867.         this.boxSearchAndHomepage.style.display = "none";
  17868.         this._isPersonalComponents = false;
  17869.  
  17870.         this.chkHomePage.checked = this.params.HomepageIsSet;
  17871.         this.chkWebSearch.checked = this.params.FFSearchIsDefault;
  17872.     },
  17873.  
  17874.     _fillUIForFullDialog: function() {
  17875.         this.boxWelcomeOnly.style.display = "none";
  17876.  
  17877.         var oEmailNotifier = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getEmailNotifierItem();
  17878.         var oWeather = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getWeatherItem();
  17879.         var oRadio = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getRadioItem();
  17880.         var oFacebook = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getFacebookItem();
  17881.  
  17882.         var bShowEmailNotifier = (oEmailNotifier) ? oEmailNotifier.isShowInPersonalComponentsDialog() : false;
  17883.         var bShowWeather = (oWeather) ? oWeather.isShowInPersonalComponentsDialog() : false;
  17884.         var bShowRadio = EBGlobalManager_CT2384137.IsWindowsPlatform() &&
  17885.                             (oRadio) ? oRadio.isShowInPersonalComponentsDialog() : false;
  17886.         var bShowFacebook = (oFacebook) ? oFacebook.isShowInPersonalComponentsDialog() : false;
  17887.  
  17888.         if (!bShowEmailNotifier && !bShowWeather && !bShowRadio && !bShowFacebook) {
  17889.             this.boxPersonalComponents.style.display = "none";
  17890.             this._isPersonalComponents = false;
  17891.         }
  17892.         else if (bShowEmailNotifier +
  17893.                     bShowWeather +
  17894.                     bShowRadio +
  17895.                     bShowFacebook == 1)
  17896.             this._isSingleComponent = true;
  17897.  
  17898.         if (EBGlobalConsts_CT2384137.IsAMO) {
  17899.             this.chkHomePage.checked = false;
  17900.             this.chkWebSearch.checked = false;
  17901.         }
  17902.         else {
  17903.             this.chkHomePage.checked = this.params.HomepageIsSet;
  17904.             this.chkWebSearch.checked = this.params.FFSearchIsDefault;
  17905.         }
  17906.         var oComponent = null;
  17907.         var strImage = "";
  17908.  
  17909.         if (this._isPersonalComponents) {
  17910.             if (!bShowEmailNotifier)
  17911.                 this.chkEmail.style.display = "none";
  17912.             else
  17913.                 this.chkEmail.checked = !EBGlobalConsts_CT2384137.IsAMO;
  17914.  
  17915.             if (!bShowWeather)
  17916.                 this.chkWeather.style.display = "none";
  17917.             else
  17918.                 this.chkWeather.checked = !EBGlobalConsts_CT2384137.IsAMO;
  17919.  
  17920.             if (!bShowRadio)
  17921.                 this.chkRadio.style.display = "none";
  17922.             else
  17923.                 this.chkRadio.checked = !EBGlobalConsts_CT2384137.IsAMO;
  17924.  
  17925.             if (!bShowFacebook)
  17926.                 this.chkFacebook.style.display = "none";
  17927.             else
  17928.                 this.chkFacebook.checked = !EBGlobalConsts_CT2384137.IsAMO;
  17929.         }
  17930.     },
  17931.  
  17932.     _applyLP: function() {
  17933.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  17934.         this.btnFinish.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_FINISH_FF');
  17935.         this.lblBtnAbort.value = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_ABORT_INSTALLATION_FF');
  17936.  
  17937.         if (this._isPersonalComponents) {
  17938.             var strTitle = (this._isSingleComponent) ? this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_INTRO_SINGLE') : this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_INTRO');
  17939.             this.dscTitle.firstChild.nodeValue = strTitle;
  17940.             this.chkEmail.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_EMAIL');
  17941.             this.chkWeather.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_WEATHER');
  17942.             this.chkRadio.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_RADIO');
  17943.             this.chkFacebook.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_FACEBOOK');
  17944.         }
  17945.  
  17946.         this.dscSettingsTitle.firstChild.nodeValue = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_SETTINGS_TITLE_FF');
  17947.         this.chkWebSearch.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_SET_SEARCH_FF').replace(/\{\{EB_TOOLBAR_NAME\}\}/g, EBGlobalConsts_CT2384137.ToolbarName);
  17948.  
  17949.         if (EBInitParams_CT2384137.homepageText)
  17950.             this.chkHomePage.label = EBInitParams_CT2384137.homepageText;
  17951.         else
  17952.             this.chkHomePage.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_SET_HOMEPAGE_FF').replace(/\{\{EB_TOOLBAR_NAME\}\}/g, EBGlobalConsts_CT2384137.ToolbarName);
  17953.  
  17954.         this.txtBottom.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_BOTTOM_FF');
  17955.         this.aEula.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_EULA');
  17956.         this.txtAnd.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_AND');
  17957.         this.aPrivacy.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_PRIVACY_POLICY');
  17958.  
  17959.         this._txtUninstallTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_ABORT_INSTALLATION_FF');
  17960.         this._txtUninstallBody = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_CONFIRM_UNINSTALL_BODY_FF').replace(/\\n/g, "\n");
  17961.         this.dscTitleWelcomeOnly.firstChild.nodeValue = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_PERSONAL_COMP_DLG_WELCOME_ONLY_TITLE_FF').replace(/\{\{EB_TOOLBAR_NAME\}\}/g, EBGlobalConsts_CT2384137.ToolbarName);
  17962.     }
  17963. };
  17964. var EBFManager_CT2384137 =
  17965. {
  17966.     CONDUIT_TOOLBARCT2384137ATTR_NAME: "ebtoolbarctid",
  17967.     VERSION_ATTR_NAME: "ebVersion",
  17968.  
  17969.     getService: function() {
  17970.         var arrConduitToolbars = this.getConduitToolbars();
  17971.         var xulToolbar = this.getMaxVersionToolbar(arrConduitToolbars);
  17972.         var strMaxVersionCTID = xulToolbar.getAttribute(this.CONDUIT_TOOLBARCT2384137ATTR_NAME);
  17973.         var oToolbar = this._getService(strMaxVersionCTID);
  17974.         return oToolbar;
  17975.     },
  17976.  
  17977.     getConduitToolbars: function() {
  17978.         var arrConduitToolbars = new Array();
  17979.         var objToolbarbox = document.getElementById('navigator-toolbox');
  17980.         var arrAllToolbars = objToolbarbox.getElementsByTagName('toolbar');
  17981.         for (var i = 0; i < arrAllToolbars.length; i++) {
  17982.             if (arrAllToolbars[i].getAttribute(this.CONDUIT_TOOLBARCT2384137ATTR_NAME))
  17983.                 arrConduitToolbars.push(arrAllToolbars[i]);
  17984.         }
  17985.  
  17986.         return arrConduitToolbars;
  17987.     },
  17988.  
  17989.     getMaxVersionToolbar: function(arrConduitToolbars) {
  17990.         if (arrConduitToolbars.length == 1)
  17991.             return arrConduitToolbars[0];
  17992.  
  17993.         var xulMaxVersionToolbar = arrConduitToolbars[0];
  17994.         var strMaxVersion = xulMaxVersionToolbar.getAttribute(this.VERSION_ATTR_NAME);
  17995.         var strVersion;
  17996.         for (var i = 1; i < arrConduitToolbars.length; i++) {
  17997.             strVersion = arrConduitToolbars[i].getAttribute(this.VERSION_ATTR_NAME);
  17998.             if (strVersion && EBGlobalManager_CT2384137.compareVersions(strVersion, strMaxVersion) > 0) {
  17999.                 strMaxVersion = strVersion;
  18000.                 xulMaxVersionToolbar = arrConduitToolbars[i];
  18001.             }
  18002.         }
  18003.  
  18004.         return xulMaxVersionToolbar;
  18005.     },
  18006.  
  18007.     _getService: function(strCTID) {
  18008.         try {
  18009.             return Components.classes["@conduit.com/toolbar;1=" + strCTID].
  18010.             getService(Components.interfaces["nsIConduitToolbar_" + strCTID]).wrappedJSObject;
  18011.         }
  18012.         catch (e) {
  18013.             EBLogging_CT2384137.LogToConsole(e);
  18014.         }
  18015.     }
  18016. };
  18017. function EBGadgetApi_CT2384137(xulBrowser, objManager, isAllowUntrustedFunctions)
  18018. {
  18019.     this.getWidth = function() {
  18020.         return EBGadgetDialog_CT2384137.popHtmlData.width;
  18021.     };
  18022.  
  18023.     this.getHeight = function() {
  18024.         return EBGadgetDialog_CT2384137.popHtmlData.height;
  18025.     };
  18026.  
  18027.     this.storeKey = function(strKey, strValue) {
  18028.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(_getUrl(), strKey);
  18029.         strValue = EBEncryption_CT2384137.encodeHex(strValue);
  18030.         EBToolbarPreferenceManager_CT2384137.SetPref(strFullPreferencePath, strValue);
  18031.     };
  18032.  
  18033.     this.retrieveKey = function(strKey) {
  18034.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(_getUrl(), strKey);
  18035.         var strValue = EBToolbarPreferenceManager_CT2384137.GetPref(strFullPreferencePath);
  18036.         if (strValue) strValue = EBEncryption_CT2384137.decodeHex(strValue);
  18037.         return strValue;
  18038.     };
  18039.  
  18040.     this.deleteKey = function(strKey) {
  18041.         var strFullPreferencePath = EBBrowserComponentApiManager_CT2384137.GetFullPreferencePath(_getUrl(), strKey);
  18042.         EBToolbarPreferenceManager_CT2384137.SetPref(strFullPreferencePath, null);
  18043.     };
  18044.  
  18045.     this.selfNavigate = function(strUrl, newWidth) {
  18046.         xulBrowser.loadURI(strUrl);
  18047.  
  18048.         if (newWidth) this.changeWidth(newWidth);
  18049.     };
  18050.  
  18051.     this.changeWidth = function(newWidth) {
  18052.         EBGadgetDialog_CT2384137.ChangeSize(newWidth, null, false);
  18053.     };
  18054.  
  18055.     this.changeHeight = function(newHeight) {
  18056.         EBGadgetDialog_CT2384137.ChangeSize(null, newHeight, false);
  18057.     };
  18058.  
  18059.     this.navigateInMainFrame = function(strUrl) {
  18060.         if (objManager && objManager._isUserClick()) {
  18061.             var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18062.             oWindow.EBLinkManager_CT2384137.LoadLinkURL(null, strUrl, "SELF", null);
  18063.         }
  18064.     };
  18065.  
  18066.     this.getMainFrameUrl = function() {
  18067.         if (!isAllowUntrustedFunctions) {
  18068.             this.lastError = 1;
  18069.             return "";
  18070.         }
  18071.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18072.         return oWindow.EBUrl_CT2384137.GetPageUrl();
  18073.     };
  18074.  
  18075.     this.getMainFrameTitle = function() {
  18076.         if (!isAllowUntrustedFunctions) {
  18077.             this.lastError = 1;
  18078.             return "";
  18079.         }
  18080.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18081.         return oWindow.EBActionManager_CT2384137.GetPageTitle();
  18082.     };
  18083.  
  18084.     this.getSearchTerm = function() {
  18085.         if (!isAllowUntrustedFunctions) {
  18086.             this.lastError = 1;
  18087.             return "";
  18088.         }
  18089.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18090.         return oWindow.EBComponentsManager_CT2384137.GetSearchBoxComponent().xulMenuList.value;
  18091.     };
  18092.  
  18093.     this.openGadget = function(strUrl, width, height, bIsResizable) {
  18094.         if (typeof bIsResizable == "undefined") bIsResizable = true;
  18095.  
  18096.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18097.  
  18098.         var popHtmlData = new oWindow.oToolbar_CT2384137.toolbarDataParsing.dataObjects.PopHtml();
  18099.         popHtmlData.popHtmlUrl = strUrl;
  18100.         popHtmlData.parentElement = EBGadgetDialog_CT2384137._oDialog;
  18101.         popHtmlData.openPositionType = popHtmlData.openPositionTypes.alignment;
  18102.         popHtmlData.openPositionData.vertical = popHtmlData.openPositionTypes.verticalAlignmentBottom;
  18103.         popHtmlData.width = width;
  18104.         popHtmlData.height = height;
  18105.         popHtmlData.resizable = bIsResizable;
  18106.         popHtmlData.isUser = isAllowUntrustedFunctions;
  18107.         popHtmlData.componentId = EBGadgetDialog_CT2384137.popHtmlData.componentId;
  18108.         popHtmlData.elementId = EBGadgetDialog_CT2384137.popHtmlData.elementId;
  18109.         popHtmlData.compType = EBGadgetDialog_CT2384137.popHtmlData.compType;
  18110.         popHtmlData.source = oWindow.EBUsageGadget_CT2384137.Other;
  18111.         popHtmlData.gadgetType = EBGadgetManager_CT2384137.GADGET_TYPE_REGULAR;
  18112.  
  18113.         oWindow.EBGadgetManager_CT2384137.OpenGadget(popHtmlData);
  18114.     };
  18115.  
  18116.     this.openGadget2 = function(strUrl, width, height, features) {
  18117.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18118.  
  18119.         var popHtmlData = new oWindow.oToolbar_CT2384137.toolbarDataParsing.dataObjects.PopHtml();
  18120.         popHtmlData.popHtmlUrl = strUrl;
  18121.         popHtmlData.parentElement = EBGadgetDialog_CT2384137._oDialog;
  18122.         popHtmlData.width = width;
  18123.         popHtmlData.height = height;
  18124.         popHtmlData.isUser = isAllowUntrustedFunctions;
  18125.         popHtmlData.componentId = EBGadgetDialog_CT2384137.popHtmlData.componentId;
  18126.         popHtmlData.elementId = EBGadgetDialog_CT2384137.popHtmlData.elementId;
  18127.         popHtmlData.compType = EBGadgetDialog_CT2384137.popHtmlData.compType;
  18128.         popHtmlData.source = oWindow.EBUsageGadget_CT2384137.Other;
  18129.         popHtmlData.gadgetType = EBGadgetManager_CT2384137.GADGET_TYPE_REGULAR;
  18130.         popHtmlData.initFeatures(features);
  18131.         oWindow.EBGadgetManager_CT2384137.OpenGadget(popHtmlData);
  18132.     };
  18133.     
  18134.     this.closeWindow = function() {
  18135.         window.close();
  18136.     };
  18137.  
  18138.     this.changeSize = function(newWidth, newHeight) {
  18139.         EBGadgetDialog_CT2384137.ChangeSize(newWidth, newHeight, false);
  18140.     };
  18141.  
  18142.     this.refreshToolbar = function() {
  18143.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18144.         var func = function() {
  18145.             oWindow.EBSpecialCommands_CT2384137.REFRESH_TOOLBAR_VIEW(false);
  18146.         };
  18147.         oWindow.setTimeout(func, 1);
  18148.     };
  18149.  
  18150.     var _getUrl = function() {
  18151.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18152.         return oWindow.EBActionManager_CT2384137.ConvertAliasesUrl(xulBrowser.currentURI.spec);
  18153.     };
  18154. };
  18155.  
  18156. EBGadgetApi_CT2384137.prototype = new EBBrowserCompApi_CT2384137();
  18157.  
  18158.  
  18159. var EBGadgetDialog_CT2384137 =
  18160. {
  18161.     popHtmlData: null,
  18162.     _oWindow: null,
  18163.  
  18164.     _oTitleBar: null,
  18165.     _oBoxTitle: null,
  18166.     _lblTitle: null,
  18167.     _oImgClose: null,
  18168.     _oBoxSpaceForClose: null,
  18169.     _oImgTitle: null,
  18170.     _oMainBox: null,
  18171.     _oDivError: null,
  18172.     _oDialog: null,
  18173.     _oResizer: null,
  18174.     _openTimeStamp: 0,
  18175.     _usageSentForClickInside: false,
  18176.  
  18177.     BrowserParentId: 'mainBox',
  18178.     _gadgetProgressListener: null,
  18179.     xulBrowser: null,
  18180.     _facebookGadgetDialog: null,
  18181.  
  18182.     OnLoad: function(event) {
  18183.         this.SetParameters();
  18184.         this.SetLocalVariables();
  18185.         this.ApplyParametersLogic();
  18186.         window.totalWidth = this.popHtmlData.width + _widthDelta;
  18187.         window.totalHeight = this.popHtmlData.height + _heightDelta;
  18188.  
  18189.         if (!EBGlobalManager_CT2384137.IsMacintoshPlatform()) {
  18190.             window.max = (window.totalHeight > window.totalWidth) ? window.totalHeight : window.totalWidth;
  18191.             window.step = max / 12;
  18192.             var oResize = function() {
  18193.                 EBGadgetDialog_CT2384137.ResizeWindow(2, 2, 1);
  18194.             };
  18195.  
  18196.             setTimeout(oResize, 1);
  18197.         }
  18198.         else {
  18199.             var funcTimeout = function() {
  18200.                 window.resizeTo(window.totalWidth, window.totalHeight);
  18201.                 EBGadgetDialog_CT2384137.CreateBrowser();
  18202.             };
  18203.  
  18204.             setTimeout(funcTimeout, 1)
  18205.         }
  18206.         //usage
  18207.         if (_gadgetType == EBUsageGadget_CT2384137.GadgetTypes.Chat)
  18208.             this._oWindow.EBUsageChat_CT2384137.OnOpen(this.popHtmlData.componentId, this.popHtmlData.elementId, this.popHtmlData.popHtmlUrl, this.popHtmlData.source, this.popHtmlData.chatRoomId, this.popHtmlData.compType);
  18209.         else {
  18210.             if (this.popHtmlData.gadgetType == EBGadgetManager_CT2384137.GADGET_TYPE_FACEBOOK) {
  18211.                 var facebookConsts = this._oWindow.oToolbar_CT2384137.facebook.consts;
  18212.                 switch (this.popHtmlData.facebookGagetType) {
  18213.                     case facebookConsts.gadgetType.login:
  18214.                         this._oWindow.EBUsageFacebook_CT2384137.OnLoginGadgetOpen(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType);
  18215.                         break;
  18216.                     case facebookConsts.gadgetType.getUpdateStatusPermission:
  18217.                         this._oWindow.EBUsageFacebook_CT2384137.OnSetStatusPermGadgetOpen(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType);
  18218.                         break;
  18219.                     case facebookConsts.gadgetType.updateStatusWithoutAfterGetPermission:
  18220.                         this._oWindow.EBUsageFacebook_CT2384137.OnSetStatusGadgetOpen(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType);
  18221.                         break;
  18222.                     case facebookConsts.gadgetType.updateStatusAfterGetPermission:
  18223.                         this._oWindow.EBUsageFacebook_CT2384137.OnSetStatusGadgetShow(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType);
  18224.                         break;
  18225.                     case facebookConsts.gadgetType.share:
  18226.                         this._oWindow.EBUsageFacebook_CT2384137.OnShareGadgetOpen(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType);
  18227.                         break;
  18228.                 }
  18229.             }
  18230.  
  18231.             else
  18232.                 this._oWindow.EBUsageGadget_CT2384137.OnOpen(this.popHtmlData.componentId, this.popHtmlData.elementId, this.popHtmlData.popHtmlUrl, this.popHtmlData.source, _gadgetType, this.popHtmlData.compType);
  18233.         }
  18234.  
  18235.     },
  18236.  
  18237.     OnUnLoad: function(event) {
  18238.         //unload gadget manager (progress listener and api)
  18239.         if (this._gadgetProgressListener)
  18240.             this._gadgetProgressListener.unload();
  18241.         //remove this browser xul object from the hash array.
  18242.         if (this._oWindow && this._oWindow.EBGadgetManager_CT2384137) {
  18243.             var index = this._oWindow.EBGadgetManager_CT2384137.arrPopupHTMLWindows.GetIndexByObjectValue(this.xulBrowser);
  18244.             this._oWindow.EBGadgetManager_CT2384137.arrPopupHTMLWindows.Remove(index, this.popHtmlData.popHtmlUrl);
  18245.         }
  18246.  
  18247.  
  18248.         //calculate open duration
  18249.         var iOpenDuration = (Date.parse(Date()) - this._openTimeStamp) / 1000;
  18250.  
  18251.         //usage, if this dialog is closed because of main window closed, "this._oWindow.EBUsageGadget_CT2384137" will be null.
  18252.         if (this._oWindow && this._oWindow.EBUsageGadget_CT2384137) {
  18253.             if (_gadgetType == EBUsageGadget_CT2384137.GadgetTypes.Chat)
  18254.                 this._oWindow.EBUsageChat_CT2384137.Close(this.popHtmlData.componentId, this.popHtmlData.elementId, this.popHtmlData.popHtmlUrl, this.popHtmlData.chatRoomId, iOpenDuration, this.popHtmlData.compType);
  18255.             else {
  18256.                 if (this.popHtmlData.gadgetType == EBGadgetManager_CT2384137.GADGET_TYPE_FACEBOOK) {
  18257.                     var facebookConsts = this._oWindow.oToolbar_CT2384137.facebook.consts;
  18258.  
  18259.                     switch (this.popHtmlData.facebookGagetType) {
  18260.                         case facebookConsts.gadgetType.login:
  18261.                             this._oWindow.EBUsageFacebook_CT2384137.OnLoginGadgetClose(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType, window.ebCloseStatus);
  18262.                             break;
  18263.                         case facebookConsts.gadgetType.getUpdateStatusPermission:
  18264.                             this._oWindow.EBUsageFacebook_CT2384137.OnSetStatusPermGadgetClose(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType, window.ebCloseStatus);
  18265.                             break;
  18266.                         case (facebookConsts.gadgetType.updateStatusWithoutAfterGetPermission):
  18267.                         case (facebookConsts.gadgetType.updateStatusAfterGetPermission):
  18268.                             this.SendSetStatusCloseUsage();
  18269.                             break;
  18270.                         case facebookConsts.gadgetType.share:
  18271.                             this._oWindow.EBUsageFacebook_CT2384137.OnShareGadgetClose(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType);
  18272.                             break;
  18273.                         case facebookConsts.gadgetType.getReadMailboxPermission:
  18274.                             this._oWindow.EBUsageFacebook_CT2384137.OnReadMailboxPermGadgetClose(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType, window.ebCloseStatus);
  18275.                             break;
  18276.                     }
  18277.                 }
  18278.                 else
  18279.                     this._oWindow.EBUsageGadget_CT2384137.Close(this.popHtmlData.componentId, this.popHtmlData.elementId, this.popHtmlData.popHtmlUrl, this.popHtmlData.source, _gadgetType, iOpenDuration, this.popHtmlData.compType);
  18280.             }
  18281.  
  18282.         }
  18283.  
  18284.     },
  18285.  
  18286.     SendSetStatusCloseUsage: function() {
  18287.         if (window.ebCloseStatus == this._oWindow.oToolbar_CT2384137.facebook.consts.gadgetClosingType.clear)
  18288.             this._oWindow.EBUsageFacebook_CT2384137.OnSetStatusGadgetClear(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType);
  18289.         else
  18290.             this._oWindow.EBUsageFacebook_CT2384137.OnSetStatusGadgetClose(this.popHtmlData.elementId, this.popHtmlData.componentId, this.popHtmlData.compType, window.ebCloseStatus);
  18291.     },
  18292.  
  18293.     OnDocumentComplete: function(bIsSuccess, bIsMainBC) {
  18294.         if (bIsMainBC) {
  18295.             if (this.xulBrowser.contentTitle && (_syncTitle || !this.popHtmlData.title))
  18296.                 this.popHtmlData.title = this.xulBrowser.contentTitle;
  18297.  
  18298.             //remove the loading animation from the window and expand the browser xul object
  18299.             this._oDialog.className = _cssDialogLoaded;
  18300.             if (!bIsSuccess)
  18301.                 this._onError();
  18302.             else {
  18303.                 this.SetTitle();
  18304.                 this._showResizer();
  18305.                 this._oDivError.style.display = 'none';
  18306.                 this._setColorForResizerAndTitle(this.GetBrowserBackgroundColor(this.xulBrowser));
  18307.             }
  18308.             this.xulBrowser.focus();
  18309.         }
  18310.  
  18311.         if (this.popHtmlData.gadgetType == EBGadgetManager_CT2384137.GADGET_TYPE_FACEBOOK) {
  18312.             if (!this._facebookGadgetDialog) this._facebookGadgetDialog = new EBFacebookGadgetDialog_CT2384137(this._oWindow, this.popHtmlData);
  18313.             this._facebookGadgetDialog.onDocumentComplete(this.xulBrowser);
  18314.         }
  18315.  
  18316.         //override the window.close function
  18317.         var innerJS = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(this.xulBrowser.contentWindow);
  18318.         innerJS.window.close = function() {
  18319.             window.close();
  18320.         };
  18321.  
  18322.  
  18323.         var facebookConsts = this._oWindow.oToolbar_CT2384137.facebook.consts;
  18324.         if (this.popHtmlData.facebookGagetType == facebookConsts.gadgetType.updateStatusWithoutAfterGetPermission || this.popHtmlData.facebookGagetType == facebookConsts.gadgetType.updateStatusAfterGetPermission) {
  18325.             var innerJS = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(this.xulBrowser.contentWindow);
  18326.             var win = this._oWindow;
  18327.             var that = this;
  18328.             innerJS.window.facebookSetStatus = function(state, status) {
  18329.  
  18330.                 if (state == "post") {
  18331.                     window.ebCloseStatus = facebookConsts.gadgetClosingType.success;
  18332.                     win.oToolbar_CT2384137.facebook.manager.setStatus(status);
  18333.                 }
  18334.                 else if (state == "cancel")
  18335.                     window.ebCloseStatus = facebookConsts.gadgetClosingType.cancel;
  18336.  
  18337.                 if (state != "clear")
  18338.                     window.close();
  18339.                 else {
  18340.                     win.oToolbar_CT2384137.facebook.manager.setStatus("");
  18341.                     win.EBUsageFacebook_CT2384137.OnSetStatusGadgetClear(that.popHtmlData.elementId, that.popHtmlData.componentId, that.popHtmlData.compType);
  18342.                 }
  18343.             };
  18344.         }
  18345.     },
  18346.  
  18347.     OnClick: function(event, strUrl) {
  18348.         if (this._usageSentForClickInside) return;
  18349.  
  18350.         if (this.popHtmlData.gadgetType == EBGadgetManager_CT2384137.GADGET_TYPE_CHAT)
  18351.             this._oWindow.EBUsageChat_CT2384137.OnClickInside(this.popHtmlData.componentId, this.popHtmlData.elementId, event, strUrl, this.popHtmlData.chatRoomId, this.popHtmlData.compType);
  18352.         else if (this.popHtmlData.gadgetType == EBGadgetManager_CT2384137.GADGET_TYPE_REGULAR)
  18353.             this._oWindow.EBUsageGadget_CT2384137.OnClickInside(this.popHtmlData.componentId, this.popHtmlData.elementId, event, this.popHtmlData.source, _gadgetType, strUrl, this.popHtmlData.compType);
  18354.  
  18355.         this._usageSentForClickInside = true;
  18356.     },
  18357.  
  18358.     _onError: function() {
  18359.         //translate error message
  18360.         var locale = this._oWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  18361.         var strErrorText = this._oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GADGETS_ERROR_TEXT');
  18362.  
  18363.         this._oDivError.innerHTML = strErrorText;
  18364.         this._oDivError.style.display = '';
  18365.         this._oDivError.style.width = this.popHtmlData.width + 'px';
  18366.         this._oDivError.style.heigh = this.popHtmlData.height + 'px';
  18367.  
  18368.         /*
  18369.         if (this._oResizer && this.popHtmlData.resizable)
  18370.         this._oResizer.style.display = 'none';
  18371.         */
  18372.         this.xulBrowser.style.display = 'none';
  18373.     },
  18374.  
  18375.     _setColorForResizerAndTitle: function(strColor) {
  18376.         //set resizer background color to be as document background color
  18377.         this._oResizer.style.backgroundColor = strColor;
  18378.         if (!this.popHtmlData.titlebar && this.popHtmlData.closeButton)
  18379.             this._oBoxSpaceForClose.style.backgroundColor = strColor;
  18380.     },
  18381.  
  18382.     _showResizer: function() {
  18383.         if (this._oResizer && this.popHtmlData.resizable) {
  18384.             this._oResizer.style.display = '';
  18385.             /*
  18386.             var curDirection = document.defaultView.getComputedStyle(this._oDialog, null).getPropertyValue("direction");
  18387.             if(curDirection == 'rtl')
  18388.             this.SetResizerRtl();
  18389.             */
  18390.         }
  18391.     },
  18392.  
  18393.     /* - disabled in this release
  18394.     //todo - create RTL css and change to it also on RTL platforms
  18395.     SetResizerRtl : function()
  18396.     {
  18397.     var xulResizer = document.getElementById('xulResizer');
  18398.     xulResizer.dir = 'bottomleft';
  18399.         
  18400.     var oImage = new Image();
  18401.     oImage.src = "chrome://iobitcom/skin/resizeRTL.gif";
  18402.     xulResizer.appendChild(oImage);
  18403.     },
  18404.     */
  18405.  
  18406.     GetBrowserBackgroundColor: function(xulCurrentBrowser) {
  18407.         try {
  18408.             var strColor = xulCurrentBrowser.contentDocument.defaultView.getComputedStyle(xulCurrentBrowser.contentDocument.getElementsByTagName('body')[0], null).getPropertyValue("background-color");
  18409.             if (strColor == 'transparent')
  18410.                 strColor = 'white';
  18411.             return strColor;
  18412.         }
  18413.         catch (ex) {
  18414.             return 'white';
  18415.             EBLogging_CT2384137.LogToConsole(ex);
  18416.         }
  18417.     },
  18418.  
  18419.     SetParameters: function() {
  18420.         this._oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  18421.  
  18422.         this.popHtmlData = window.arguments[0];
  18423.         this.popHtmlData.popHtmlUrl = this._oWindow.EBActionManager_CT2384137.ConvertAliasesUrl(this.popHtmlData.popHtmlUrl);
  18424.     },
  18425.  
  18426.     SetLocalVariables: function() {
  18427.         this._oTitleBar = document.getElementById('titleBar');
  18428.         this._oBoxTitle = document.getElementById("boxTitle");
  18429.         this._lblTitle = document.getElementById('lblTitle');
  18430.         this._oImgClose = document.getElementById('imgClose');
  18431.         this._oBoxSpaceForClose = document.getElementById("boxSpaceForClose");
  18432.         this._oImgEdit = document.getElementById('imgEdit');
  18433.         this._oImgTitle = document.getElementById('imgTitle');
  18434.         this._oMainBox = document.getElementById('mainBox');
  18435.         this._oResizer = document.getElementById('boxResize');
  18436.         this._oDivError = document.getElementById('dscErrorLoading');
  18437.         this._oDialog = document.getElementById('EBPopupHTMLWindow');
  18438.     },
  18439.  
  18440.     ApplyParametersLogic: function() {
  18441.         if (!this.popHtmlData.titlebar && !this.popHtmlData.closeButton)
  18442.             this._oBoxTitle.style.display = "none";
  18443.         else {
  18444.             if (!this.popHtmlData.titlebar) {
  18445.                 this._oTitleBar.style.display = "none";
  18446.                 this._oBoxSpaceForClose.style.display = "";
  18447.                 this._oBoxTitle.className = "";
  18448.             }
  18449.  
  18450.             if (!this.popHtmlData.closeButton)
  18451.                 this._oImgClose.style.display = "none";
  18452.         }
  18453.         this._showResizer();
  18454.     },
  18455.  
  18456.     SetBrowserLogics: function() {
  18457.         if (!this.popHtmlData.scrollV && !this.popHtmlData.scrollH)
  18458.             this.xulBrowser.setAttribute("autoscroll", false);
  18459.         else {
  18460.             if (this.popHtmlData.scrollV)
  18461.                 this.xulBrowser.style.overflowY = "auto";
  18462.             if (this.popHtmlData.scrollH)
  18463.                 this.xulBrowser.style.overflowX = "auto";
  18464.         }
  18465.     },
  18466.  
  18467.     ResizeWindow: function(newWidth, newHeight, i) {
  18468.         newWidth = parseInt(newWidth); newHeight = parseInt(newHeight);
  18469.         i = parseInt(i);
  18470.  
  18471.         // final resize
  18472.         if (i >= max) {
  18473.             window.resizeTo(parseInt(this.popHtmlData.width) + _widthDelta, parseInt(this.popHtmlData.height) + _heightDelta);
  18474.             this.CreateBrowser();
  18475.             return;
  18476.         }
  18477.  
  18478.         i += Math.floor(step);
  18479.         if (i <= this.popHtmlData.height) { newHeight = i; }
  18480.         if (i <= this.popHtmlData.width) { newWidth = i; }
  18481.         window.resizeTo(newWidth, newHeight);
  18482.  
  18483.         var oResize = function() {
  18484.             EBGadgetDialog_CT2384137.ResizeWindow(newWidth, newHeight, i);
  18485.         };
  18486.  
  18487.         setTimeout(oResize, 1);
  18488.     },
  18489.  
  18490.     SetTitleFromDocument: function() {
  18491.         if (EBGadgetDialog_CT2384137.xulBrowser.contentTitle)
  18492.             EBGadgetDialog_CT2384137.popHtmlData.title = EBGadgetDialog_CT2384137.xulBrowser.contentTitle;
  18493.         EBGadgetDialog_CT2384137.SetTitle();
  18494.         EBGadgetDialog_CT2384137.SetIcon();
  18495.  
  18496.         if (!EBGadgetDialog_CT2384137.popHtmlData.titlebar) {
  18497.             EBGadgetDialog_CT2384137._oBoxTitle.style.backgroundColor = EBGadgetDialog_CT2384137.GetBrowserBackgroundColor(EBGadgetDialog_CT2384137.xulBrowser);
  18498.         }
  18499.     },
  18500.  
  18501.     SetTitle: function() {
  18502.         this._lblTitle.value = this.popHtmlData.title;
  18503.  
  18504.         if (!this.IsCloseVisible()) {
  18505.             var strTitle;
  18506.  
  18507.             for (var i = this.popHtmlData.title.length; i >= 0; i--) {
  18508.                 strTitle = this.popHtmlData.title.substring(0, i);
  18509.                 this._lblTitle.value = strTitle;
  18510.  
  18511.                 if (this.IsCloseVisible())
  18512.                     break;
  18513.             }
  18514.         }
  18515.  
  18516.         window.title = this._lblTitle.value;
  18517.     },
  18518.  
  18519.     SetIcon: function() {
  18520.         var imageUrl = "";
  18521.         if (this.popHtmlData.titleIconUrl)
  18522.             imageUrl = this.popHtmlData.titleIconUrl;
  18523.         /* - favicon disabled in this release
  18524.         else {
  18525.         var strUrl = this.xulBrowser.currentURI.host;
  18526.         strUrl = EBUrl_CT2384137.LegalizeLinkUrl(strUrl);
  18527.         imageUrl = strUrl + "/favicon.ico";
  18528.         }*/
  18529.  
  18530.         EBGadgetDialog_CT2384137._oImgTitle.src = imageUrl;
  18531.     },
  18532.  
  18533.     IsCloseVisible: function() {
  18534.         var iBoxTitleWidth = this._oDialog.boxObject.width;
  18535.         var iCloseTopRight = this._oImgClose.boxObject.x + this._oImgClose.boxObject.width;
  18536.         return iCloseTopRight + _addCloseSpace <= iBoxTitleWidth;
  18537.     },
  18538.  
  18539.     CreateBrowser: function() {
  18540.         this.xulBrowser = EBXULFactory_CT2384137.CreateBrowser(this.popHtmlData.popHtmlUrl, this.popHtmlData.popHtmlUrl, this.popHtmlData.width, this.popHtmlData.height);
  18541.         this.xulBrowser.setAttribute('flex', '1');
  18542.         this.xulBrowser.setAttribute('type', 'content-primary');
  18543.         var oBrowser = this._oWindow.EBGadgetManager_CT2384137.arrPopupHTMLWindows.GetByID(this.popHtmlData.popHtmlUrl);
  18544.  
  18545.         //add this browser xul object to hash table of objects
  18546.         if (!oBrowser)
  18547.             this._oWindow.EBGadgetManager_CT2384137.arrPopupHTMLWindows.Add(this.popHtmlData.popHtmlUrl, this.xulBrowser);
  18548.  
  18549.         this._oMainBox.appendChild(this.xulBrowser);
  18550.         this._setListeners();
  18551.         this.OnFocus();
  18552.         this.SetBrowserLogics();
  18553.     },
  18554.  
  18555.     _setListeners: function() {
  18556.         this._gadgetProgressListener = new EBGadgetProgressListener_CT2384137();
  18557.         this._gadgetProgressListener.init(this.xulBrowser, this._isAllowUntrustedFunctions(), this.popHtmlData.width, this.popHtmlData.height, this.popHtmlData.componentId, this.popHtmlData.elementId, this.popHtmlData.compType);
  18558.         this._gadgetProgressListener.initGadgetData(this.popHtmlData.source, this.popHtmlData.gadgetType, EBGadgetDialog_CT2384137.OnDocumentComplete, EBGadgetDialog_CT2384137.OnClick, this);
  18559.         this.xulBrowser.addEventListener("DOMTitleChanged", EBGadgetDialog_CT2384137.SetTitleFromDocument, false);
  18560.         this.xulBrowser.addEventListener("blur", EBGadgetDialog_CT2384137.OnBrowserBlur, true);
  18561.         this.xulBrowser.addEventListener("mousemove", EBGadgetDialog_CT2384137.OnMouseMove, true);
  18562.     },
  18563.  
  18564.     _isAllowUntrustedFunctions: function() {
  18565.         //if user component, always allow.
  18566.         if (this.popHtmlData.isUser) return true;
  18567.  
  18568.         return this._oWindow.oToolbarManager_CT2384137.getToolbarData().generalToolbarInfo.allowNonPrivacyFunctions;
  18569.     },
  18570.  
  18571.     ChangeSize: function(newWidth, newHeight, isFromManualResize) {
  18572.         if (isFromManualResize) {
  18573.             newWidth = parseInt(document.defaultView.getComputedStyle(this.xulBrowser, null).getPropertyValue("width"));
  18574.             newHeight = parseInt(document.defaultView.getComputedStyle(this.xulBrowser, null).getPropertyValue("height"));
  18575.         }
  18576.         else {
  18577.             if (!newHeight)
  18578.                 newHeight = parseInt(document.defaultView.getComputedStyle(this.xulBrowser, null).getPropertyValue("height")) + 5;
  18579.  
  18580.             if (!newWidth)
  18581.                 newWidth = parseInt(document.defaultView.getComputedStyle(this.xulBrowser, null).getPropertyValue("width"));
  18582.         }
  18583.  
  18584.         this.popHtmlData.width = parseInt(newWidth);
  18585.         this.popHtmlData.height = parseInt(newHeight);
  18586.  
  18587.         var bAdjustSize = false;
  18588.         if (this._oDialog.boxObject.width < _minWidth + _widthDelta) {
  18589.             bAdjustSize = true;
  18590.             this.popHtmlData.width = _minWidth;
  18591.         }
  18592.  
  18593.         if (this._oDialog.boxObject.height < _minHeight + _heightDelta) {
  18594.             bAdjustSize = true;
  18595.             this.popHtmlData.height = _minHeight;
  18596.         }
  18597.  
  18598.         //don't resize if the window is already manually resized
  18599.         if (!isFromManualResize || bAdjustSize)
  18600.             window.resizeTo(this.popHtmlData.width + _widthDelta, this.popHtmlData.height + _heightDelta);
  18601.  
  18602.         //save new size
  18603.         var strGadgetName = (this.popHtmlData.gadgetType == EBGadgetManager_CT2384137.GADGET_TYPE_CHAT) ? EBGadgetManager_CT2384137.CHAT_DIALOG_NAME : this.popHtmlData.popHtmlUrl;
  18604.         if (this.popHtmlData.saveSize)
  18605.             this._oWindow.EBGadgetManager_CT2384137.GadgetSize(strGadgetName, this.popHtmlData.width, this.popHtmlData.height);
  18606.  
  18607.         this.SetTitle();
  18608.     },
  18609.  
  18610.     ///////////////////////////////////////////////////////////
  18611.     //Title bar events
  18612.     OnMouseDownMinMax: function(event) {
  18613.         window.minimize();
  18614.     },
  18615.  
  18616.     OnMouseUpMinMax: function(event) {
  18617.         event.target.src = _imgMin;
  18618.     },
  18619.  
  18620.     OnMouseOverMinMax: function(event) {
  18621.         event.target.src = _imgMin_hover;
  18622.     },
  18623.  
  18624.     OnMouseOutMinMax: function(event) {
  18625.         event.target.src = _imgMin;
  18626.     },
  18627.  
  18628.     OnMouseDownClose: function(event) {
  18629.         event.target.src = _imgClose_dn;
  18630.     },
  18631.  
  18632.     OnMouseUpClose: function(event) {
  18633.         event.target.src = _imgClose;
  18634.         window.ebCloseStatus = "Close";
  18635.         window.close();
  18636.     },
  18637.  
  18638.     OnMove: function(event) {
  18639.         var strGadgetName = (this.popHtmlData.gadgetType == EBGadgetManager_CT2384137.GADGET_TYPE_CHAT) ? EBGadgetManager_CT2384137.CHAT_DIALOG_NAME : this.popHtmlData.popHtmlUrl;
  18640.         if (EBGadgetDialog_CT2384137.popHtmlData.saveLocation)
  18641.             this._oWindow.EBGadgetManager_CT2384137.GadgetCoordinates(strGadgetName, this._oDialog.boxObject.screenX, this._oDialog.boxObject.screenY);
  18642.     },
  18643.  
  18644.     //Title bar events end
  18645.     ///////////////////////////////////////////////////////////
  18646.  
  18647.     OnResizeEnd: function(event) {
  18648.         this.ChangeSize(null, null, true);
  18649.     },
  18650.  
  18651.     OnFocus: function(event) {
  18652.         var oBrowser = this._oMainBox.firstChild;
  18653.  
  18654.         if (oBrowser)
  18655.             this._oWindow.EBGadgetManager_CT2384137.selectedPopWindowId = oBrowser.id;
  18656.     },
  18657.  
  18658.     //track mouse move from the dialog, because browser tracking stops when mouse over dialog.
  18659.     OnMouseMove: function(event) {
  18660.         EBGadgetDialog_CT2384137._oWindow.EBGlobalVariables_CT2384137.ScreenCoordinateX = event.screenX;
  18661.         EBGadgetDialog_CT2384137._oWindow.EBGlobalVariables_CT2384137.ScreenCoordinateY = event.screenY;
  18662.     },
  18663.  
  18664.     OnBrowserBlur: function(event) {
  18665.         if (!EBGadgetDialog_CT2384137.popHtmlData.closeOnExternalClick) return;
  18666.  
  18667.         //check if the click is inside the gadget
  18668.         //usage global mouse position and gadget's box object
  18669.         var topLeft = { "x": EBGadgetDialog_CT2384137.xulBrowser.boxObject.screenX, "y": EBGadgetDialog_CT2384137.xulBrowser.boxObject.screenY };
  18670.         var bottomRight = { "x": topLeft.x + EBGadgetDialog_CT2384137.xulBrowser.boxObject.width, "y": topLeft.y + EBGadgetDialog_CT2384137.xulBrowser.boxObject.height };
  18671.  
  18672.         var mouseX = EBGadgetDialog_CT2384137._oWindow.EBGlobalVariables_CT2384137.ScreenCoordinateX;
  18673.         var mouseY = EBGadgetDialog_CT2384137._oWindow.EBGlobalVariables_CT2384137.ScreenCoordinateY;
  18674.  
  18675.         if (mouseX >= topLeft.x && mouseX <= bottomRight.x &&
  18676.         mouseY >= topLeft.y && mouseY <= bottomRight.y) {
  18677.             return;
  18678.         }
  18679.  
  18680.         var oWin = EBGadgetDialog_CT2384137._oWindow;
  18681.         var bringToFrontOtherGadgets = function() {
  18682.             oWin.EBGadgetManager_CT2384137.BringToFront();
  18683.         };
  18684.         oWin.setTimeout(bringToFrontOtherGadgets, 50);
  18685.         window.close();
  18686.     },
  18687.  
  18688.     ChatRoomChange: function(strNewUrl) {
  18689.         this._gadgetProgressListener._selfNavigate(strNewUrl, null);
  18690.         window.focus();
  18691.  
  18692.         //send usage
  18693.         EBUsageButton_CT2384137.OnItemClick(this.popHtmlData.componentId, this.popHtmlData.elementId, this.popHtmlData.compType);
  18694.     }
  18695. }
  18696.  
  18697. //inherits from nsIWebProgressListener
  18698. function EBGadgetProgressListener_CT2384137() {
  18699.     this.isClickedInGadget = false;
  18700.     this.source = "";
  18701.     this.gadgetType = "";
  18702.     this.callbackDocumentComplete = null;
  18703.     this.callbackOnClick = null;
  18704.     this.callbackThis = null;
  18705.  
  18706.     this._onDocumentComplete = function(bIsSuccess, bIsMainBC) {
  18707.         if (this.callbackDocumentComplete)
  18708.                 this.callbackDocumentComplete.call(this.callbackThis, bIsSuccess, bIsMainBC);
  18709.     };
  18710.  
  18711.     this._initBrowserCompApi = function() {
  18712.         this.browserCompApi = new EBGadgetApi_CT2384137(this.xulBrowser, this, this.isAllowUntrustedFunctions);
  18713.     };
  18714.  
  18715.     this.onclick = function(event) {
  18716.         this._logUserActionTimeStamp(event);
  18717.  
  18718.         //send usage
  18719.         if (this.callbackOnClick)
  18720.             this.callbackOnClick.call(this.callbackThis, event, this.xulBrowser.currentURI.spec);
  18721.     };
  18722.  
  18723.     this.initGadgetData = function(strSource, strGadgetType, callbackDocumentComplete, callbackOnClick, that) {
  18724.         this.source = strSource;
  18725.         this.gadgetType = strGadgetType;
  18726.         this.isGadget = true;
  18727.         this.callbackDocumentComplete = callbackDocumentComplete;
  18728.         this.callbackThis = that;
  18729.         this.callbackOnClick = callbackOnClick;
  18730.     };
  18731. };
  18732.  
  18733. EBGadgetProgressListener_CT2384137.prototype = new EBBrowserCompProgressListener_CT2384137();
  18734.  
  18735. var EBGadgetManager_CT2384137 =
  18736. {
  18737.     BrowserName: 'popupHTMLWindow',
  18738.     PopupHTMLWindowId: 'EBPopupHTMLWindow',
  18739.     arrPopupHTMLWindows: null,
  18740.     strChromePath: 'chrome://iobitcom/content/popup.xul',
  18741.     strChromePathChat: 'chrome://iobitcom/content/popup_chat.xul',
  18742.     selectedPopWindowId: null,
  18743.  
  18744.     GADGET_TYPE_REGULAR: 1,
  18745.     GADGET_TYPE_CHAT: 4,
  18746.     GADGET_TYPE_FACEBOOK: 5,
  18747.  
  18748.     CHAT_DIALOG_NAME: 'ChatGadgetWindowNameCT2384137',
  18749.  
  18750.     OpenGadget: function(objPopHtmlDataOriginal) {
  18751.         //clone the data object to ensure that changes that will be made in gadget will not reflect
  18752.         //next time that the same gadget will be opened
  18753.         var objPopHtmlData = EBGlobalManager_CT2384137.cloneObject(objPopHtmlDataOriginal);
  18754.         //check if already opened
  18755.         var strDialogName = (objPopHtmlData.gadgetType != this.GADGET_TYPE_CHAT) ?
  18756.             objPopHtmlData.popHtmlUrl : this.CHAT_DIALOG_NAME;
  18757.  
  18758.         var oDialog = this.GetGadgetWindow(strDialogName);
  18759.         if (oDialog) {
  18760.             //regular gadget
  18761.             if (objPopHtmlData.gadgetType != this.GADGET_TYPE_CHAT)
  18762.                 oDialog.focus()
  18763.             //chat gadget, reload with new url
  18764.             else
  18765.                 oDialog.EBGadgetDialog_CT2384137.ChatRoomChange(objPopHtmlData.popHtmlUrl);
  18766.  
  18767.             return;
  18768.         }
  18769.  
  18770.         this.initGadgetsHash();
  18771.  
  18772.         var features = "";
  18773.         var position = "";
  18774.         var bHaveSavedLocation = false;
  18775.  
  18776.         //get saved size, if exists
  18777.         if (objPopHtmlData.saveSize) {
  18778.             var size = this.GadgetSize(objPopHtmlData.popHtmlUrl);
  18779.             if (size) {
  18780.                 objPopHtmlData.width = size.width;
  18781.                 objPopHtmlData.height = size.height;
  18782.             }
  18783.         }
  18784.  
  18785.         var x, y;
  18786.         //get saved location, if exists
  18787.         if (objPopHtmlData.saveLocation) {
  18788.             var coordinates = this.GadgetCoordinates(objPopHtmlData.popHtmlUrl);
  18789.             if (coordinates) {
  18790.                 x = coordinates.x;
  18791.                 y = coordinates.y;
  18792.                 bHaveSavedLocation = true;
  18793.             }
  18794.         }
  18795.  
  18796.         if (!bHaveSavedLocation) {
  18797.             switch (objPopHtmlData.openPositionType) {
  18798.                 case objPopHtmlData.openPositionTypes.click:
  18799.                     x = EBGlobalVariables_CT2384137.ScreenCoordinateX;
  18800.                     y = EBGlobalVariables_CT2384137.ScreenCoordinateY;
  18801.  
  18802.                     break;
  18803.                 case objPopHtmlData.openPositionTypes.center:
  18804.                     x = screen.availWidth / 2 - (objPopHtmlData.width / 2);
  18805.                     y = screen.availHeight / 2 - (objPopHtmlData.height / 2);
  18806.                     break;
  18807.                 case objPopHtmlData.openPositionTypes.alignment:
  18808.                     if (objPopHtmlData.openPositionData.vertical == objPopHtmlData.openPositionTypes.verticalAlignmentTop)
  18809.                         y = objPopHtmlData.parentElement.boxObject.screenY - objPopHtmlData.height - 38;
  18810.                     else
  18811.                         y = objPopHtmlData.parentElement.boxObject.screenY + objPopHtmlData.parentElement.boxObject.height;
  18812.  
  18813.                     if (objPopHtmlData.openPositionData.horizontal == objPopHtmlData.openPositionTypes.horizontalAlignmentRight)
  18814.                         x = objPopHtmlData.parentElement.boxObject.screenX + objPopHtmlData.parentElement.boxObject.width - objPopHtmlData.width - 2;
  18815.                     else
  18816.                         x = objPopHtmlData.parentElement.boxObject.screenX
  18817.  
  18818.                     break;
  18819.                 case objPopHtmlData.openPositionTypes.offset:
  18820.                     x = objPopHtmlData.parentElement.boxObject.screenX + objPopHtmlData.openPositionData.offsetX;
  18821.                     y = objPopHtmlData.parentElement.boxObject.screenY + objPopHtmlData.openPositionData.offsetY;
  18822.                     break;
  18823.             }
  18824.         }
  18825.  
  18826.         //window is bigger then browser object, because of the borders and custom title
  18827.         if (objPopHtmlData.width + 2 > screen.availWidth + screen.availLeft)
  18828.             objPopHtmlData.width = screen.availWidth + screen.availLeft - 2;
  18829.  
  18830.         if (objPopHtmlData.height + 40 > screen.availHeight)
  18831.             objPopHtmlData.height = screen.availHeight - 40;
  18832.  
  18833.  
  18834.         // adjust window top left corner according to available portion of
  18835.         // the user screen
  18836.  
  18837.         if (x + objPopHtmlData.width + 2 > screen.availWidth + screen.availLeft)
  18838.             x = screen.availWidth + screen.availLeft - objPopHtmlData.width - 2;
  18839.  
  18840.         if (y + objPopHtmlData.height + 38 > screen.availHeight)
  18841.             y = screen.availHeight - objPopHtmlData.height - 38;
  18842.  
  18843.         position = "left=" + x + ",top=" + y;
  18844.  
  18845.         //regular gadget
  18846.         if (objPopHtmlData.gadgetType != this.GADGET_TYPE_CHAT)
  18847.             features = "dependent,";
  18848.         if (EBGlobalManager_CT2384137.IsMacintoshPlatform() && !EBGlobalManager_CT2384137.IsFirefox36()) 
  18849.             features += "titlebar = no,"
  18850.         else
  18851.             features += "titlebar = yes,"
  18852.         features += "chrome,resizable=yes,width=1,height=1," + position;
  18853.  
  18854.         var strChromePath = this.GetGadgetChromePath(objPopHtmlData.gadgetType);
  18855.         window.openDialog(strChromePath, strDialogName, features, objPopHtmlData);
  18856.     },
  18857.  
  18858.     initGadgetsHash: function() {
  18859.         if (!EBGlobalManager_CT2384137.GetMostRecentBrowserWindow().EBGadgetManager_CT2384137.arrPopupHTMLWindows)
  18860.             EBGlobalManager_CT2384137.GetMostRecentBrowserWindow().EBGadgetManager_CT2384137.arrPopupHTMLWindows = new EBArrayHashObject_CT2384137();
  18861.     },
  18862.  
  18863.     GetGadgetWindow: function(strURL) {
  18864.         var oDialog = EBGlobalManager_CT2384137.GetXULWindowByTypeAndName("EBPopupDialog_CT2384137", strURL)
  18865.         return oDialog;
  18866.     },
  18867.  
  18868.     RefreshContent: function(oDialog) {
  18869.         try {
  18870.             var oBrowser = oDialog.document.getElementsByTagName('browser')[0];
  18871.             oBrowser.setAttribute('EBStopped', true);
  18872.             oBrowser.reload();
  18873.         }
  18874.         catch (e) {
  18875.             EBLogging_CT2384137.LogToConsole(e);
  18876.         }
  18877.     },
  18878.  
  18879.     GetGadgetChromePath: function(GadgetType) {
  18880.         GadgetType = parseInt(GadgetType);
  18881.         if (!GadgetType) GadgetType = this.GADGET_TYPE_REGULAR;
  18882.         var strPath = '';
  18883.         switch (GadgetType) {
  18884.             case this.GADGET_TYPE_REGULAR: strPath = this.strChromePath; break;
  18885.             case this.GADGET_TYPE_FACEBOOK: strPath = this.strChromePath; break;
  18886.             case this.GADGET_TYPE_CHAT: strPath = this.strChromePathChat; break;
  18887.         }
  18888.  
  18889.         return strPath;
  18890.     },
  18891.  
  18892.     IsGadget: function(xulBrowser) {
  18893.         if (xulBrowser.parentNode.getAttribute('id') == EBGadgetDialog_CT2384137.BrowserParentId)
  18894.             return true;
  18895.         else
  18896.             return false;
  18897.     },
  18898.  
  18899.     BringToFront: function() {
  18900.         //enough to focus on one popup window, in order to bring all others to front
  18901.         window.focus();
  18902.         var i;
  18903.         if (this.arrPopupHTMLWindows != null && this.arrPopupHTMLWindows.Count() != 0) {
  18904.             var xulBrowser = null;
  18905.             for (i = 0; i < this.arrPopupHTMLWindows.Count(); i++) {
  18906.                 xulBrowser = this.arrPopupHTMLWindows.GetByIndex(i);
  18907.                 try {
  18908.                     xulBrowser = EBGlobalManager_CT2384137.GetXULWindowByTypeAndName("EBPopupDialog_CT2384137", xulBrowser.id);
  18909.                     xulBrowser.focus();
  18910.                     break;
  18911.                 }
  18912.                 catch (ex) {
  18913.                     EBLog(ex);
  18914.                 }
  18915.             }
  18916.         }
  18917.         //no open pop-up windows in this toolbar, check if there are in other toolbars
  18918.         else {
  18919.             var cmndName = '';
  18920.             var thatGlobalManager;
  18921.             var thatGadgetManager;
  18922.             var arrCTID = EBActionManager_CT2384137.GetEBToolbarsCTID();
  18923.             for (i = 0; i < arrCTID.length; i++) {
  18924.                 thatGlobalManager = window["EBGlobalManager_" + arrCTID[i].originalCTID];
  18925.                 thatGadgetManager = window["EBGadgetManager_" + arrCTID[i].originalCTID];
  18926.                 if (thatGlobalManager && thatGadgetManager) {
  18927.                     oDialog = thatGlobalManager.GetXULWindowByTypeAndName("EBPopupDialog_" + arrCTID[i].originalCTID, thatGadgetManager.selectedPopWindowId);
  18928.                     if (oDialog) {
  18929.                         oDialog.focus();
  18930.                         break;
  18931.                     }
  18932.                 }
  18933.             }
  18934.         }
  18935.     },
  18936.  
  18937.     GadgetCoordinates: function(strUrl, posX, posY) {
  18938.         var strPref = EBPreferenceConsts_CT2384137.MiniIPageGadgetPosition + '.' + strUrl;
  18939.         var strPos;
  18940.         //get
  18941.         if (typeof posX == 'undefined' && typeof posY == 'undefined') {
  18942.             strPos = EBGlobalPreferenceManager_CT2384137.GetPref(strPref);
  18943.             if (strPos) {
  18944.                 var arrPos = strPos.split('x');
  18945.                 return { x: parseInt(arrPos[0]), y: parseInt(arrPos[1]) };
  18946.             }
  18947.             else
  18948.                 return null;
  18949.         }
  18950.         //set
  18951.         else {
  18952.             strPos = posX + 'x' + posY;
  18953.             EBGlobalPreferenceManager_CT2384137.SetPref(strPref, strPos);
  18954.         }
  18955.     },
  18956.  
  18957.     GadgetSize: function(strUrl, width, height) {
  18958.         var strPref = EBPreferenceConsts_CT2384137.MiniIPageGadgetSize + '.' + strUrl;
  18959.         var strSize;
  18960.         //get
  18961.         if (typeof width == 'undefined' && typeof height == 'undefined') {
  18962.             strSize = EBGlobalPreferenceManager_CT2384137.GetPref(strPref);
  18963.             if (strSize) {
  18964.                 var arrSize = strSize.split('x');
  18965.                 if (isNaN(parseInt(arrSize[0])) || isNaN(parseInt(arrSize[1])))
  18966.                     return null;
  18967.                 else
  18968.                     return { width: parseInt(arrSize[0]), height: parseInt(arrSize[1]) };
  18969.             }
  18970.             else
  18971.                 return null;
  18972.         }
  18973.         //set
  18974.         else {
  18975.             strSize = width + 'x' + height;
  18976.             EBGlobalPreferenceManager_CT2384137.SetPref(strPref, strSize);
  18977.         }
  18978.     }
  18979. };
  18980. var EBMCTrusteDialog_CT2384137 =
  18981. {
  18982.     dialogFilename: "truste.xul",
  18983.     dialogName: "EBTrusteDialogName",
  18984.     dialogId: "EBTrusteDialogId",
  18985.  
  18986.     downloadUrl: "",
  18987.     mainWindow: null,
  18988.     usageSource: "",
  18989.  
  18990.     //************** toolbar scope **************
  18991.     open: function(strDownloadUrl, strUsageSource) {
  18992.         window.openDialog(EBGlobalConsts_CT2384137.ChromeContentPath + this.dialogFilename,
  18993.                             this.dialogName,
  18994.                             'modal,centerscreen,chrome,resizable=no',
  18995.                             strDownloadUrl, strUsageSource);
  18996.     },
  18997.  
  18998.  
  18999.     //************** dialog scope **************
  19000.     onload: function(event) {
  19001.         this.downloadUrl = window.arguments[0];
  19002.         this.usageSource = window.arguments[1];
  19003.         this.mainWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  19004.         this._applyLP();
  19005.     },
  19006.  
  19007.     onunload: function(event) {
  19008.  
  19009.     },
  19010.  
  19011.     onaccept: function() {
  19012.         var strUsageSource = this.usageSource;
  19013.         var strUrl = this.downloadUrl;
  19014.         var oWin = this.mainWindow;
  19015.  
  19016.         var funcGetAndChangeCommunity = function() {
  19017.             oWin.EBMCManager_CT2384137.GetAndChangeCommunity(strUrl, strUsageSource);
  19018.         };
  19019.  
  19020.         oWin.setTimeout(funcGetAndChangeCommunity, 1000);
  19021.     },
  19022.  
  19023.     oncancel: function() {
  19024.  
  19025.     },
  19026.  
  19027.     onclickEULA: function() {
  19028.         EBActionManager_CT2384137.OpenEULA("BLANK", this.downloadUrl);
  19029.     },
  19030.  
  19031.     _applyLP: function() {
  19032.         var dialogsDirection = this.mainWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  19033.         if (dialogsDirection)
  19034.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, this.dialogId);
  19035.  
  19036.         var locale = this.mainWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  19037.         window.title = this.mainWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_ADD_COMMUNITY_DLG_TITLE');
  19038.  
  19039.         document.getElementById("dscText1").firstChild.nodeValue = this.mainWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_ADD_COMMUNITY_DLG_EXPLAIN1');
  19040.         document.getElementById("dscText2").firstChild.nodeValue = this.mainWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_ADD_COMMUNITY_DLG_EXPLAIN2');
  19041.         document.getElementById("lblEula").value = this.mainWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_ADD_COMMUNITY_DLG_LEARN_MORE');
  19042.         document.getElementById("btnAccept").setAttribute("label", this.mainWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK'));
  19043.         document.getElementById("btnCancel").setAttribute("label", this.mainWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL'));
  19044.     }
  19045. }
  19046. var EBGroupingManager_CT2384137 =
  19047. {
  19048.     LOCALE_PREF_NAME: "general.useragent.locale",
  19049.     groupingReceived: false,
  19050.  
  19051.     canInitToolbar: function() {
  19052.         if (!EBGlobalConsts_CT2384137.IsSelectFromGroupingByLocale) return true;
  19053.         //this will be relevant when upgrade is done, if the new toolbar set to select from grouping
  19054.         if (EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.FirstTime)) return true;
  19055.  
  19056.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.IsToolbarSelectedFromGrouping);
  19057.     },
  19058.  
  19059.     initFirstTime: function() {
  19060.         EBMCServerComm_CT2384137.GetGroupInfoFromServer(true);
  19061.         var that = this;
  19062.         setTimeout(function() { that.checkGroupingReceived.call(that); }, 5000);
  19063.     },
  19064.  
  19065.     onErrorGetting: function() {
  19066.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.IsToolbarSelectedFromGrouping, true);
  19067.         if (!EBToolbarPreferenceManager_CT2384137.HasUserValue(EBPreferenceConsts_CT2384137.CTID))
  19068.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CTID, EBGlobalConsts_CT2384137.ToolbarCTID);
  19069.         //TODO: set client error log
  19070.         EBToolbarManager_CT2384137.onload();
  19071.     },
  19072.  
  19073.     onGroupingResponse: function(objGroupingCommunities) {
  19074.         //grouping already selected or no need to select
  19075.         if (this.canInitToolbar()) return;
  19076.  
  19077.         this.groupingReceived = true;
  19078.         EBGroupingManager_CT2384137.selectToolbarFromGroupingByLocale(objGroupingCommunities);
  19079.     },
  19080.  
  19081.     checkGroupingReceived: function() {
  19082.         if (!this.groupingReceived)
  19083.             this.onErrorGetting();
  19084.     },
  19085.  
  19086.     selectToolbarFromGroupingByLocale: function(objGroupingCommunities) {
  19087.         if (!objGroupingCommunities || objGroupingCommunities.IsEmpty())
  19088.             this.onErrorGetting();
  19089.  
  19090.         var systemLocale = EBPreferenceService_CT2384137.GetPref(this.LOCALE_PREF_NAME);
  19091.         if (!systemLocale)
  19092.             this.onErrorGetting();
  19093.  
  19094.         var perfectMatchCTID = "";
  19095.         var nearMatchCTID = EBGlobalConsts_CT2384137.ToolbarCTID;
  19096.  
  19097.         try {
  19098.             if (!stringEquals(systemLocale, EBGlobalConsts_CT2384137.ToolbarLanguage, true)) {
  19099.                 var communities = objGroupingCommunities.CommunityList();
  19100.                 var community = null;
  19101.  
  19102.                 for (var i = 0; i < communities.Count(); i++) {
  19103.                     community = communities.GetByIndex(i);
  19104.                     if (community.Locale && stringEquals(community.Locale, systemLocale, true)) {
  19105.                         perfectMatchCTID = community.CTID;
  19106.                         break;
  19107.                     }
  19108.  
  19109.                     if (community.Locale && stringEquals(community.Locale.substr(0, 2), systemLocale.substr(0, 2), true))
  19110.                         nearMatchCTID = community.CTID;
  19111.                 }
  19112.             }
  19113.  
  19114.             var selectedCTID = (perfectMatchCTID) ? perfectMatchCTID : nearMatchCTID;
  19115.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CTID, selectedCTID);
  19116.         }
  19117.         catch (e) {
  19118.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CTID, EBGlobalConsts_CT2384137.ToolbarCTID);
  19119.             EBLog(e);
  19120.         }
  19121.  
  19122.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.IsToolbarSelectedFromGrouping, true);
  19123.         EBToolbarManager_CT2384137.onload();
  19124.     }
  19125. };
  19126. var EBMCButtonManager_CT2384137 =
  19127. {
  19128.     Consts:
  19129.     {
  19130.         CandidateIcon               : 'chrome://iobitcom/skin/mc_add_candidate.png',
  19131.         TimeoutFuncRef                : null,
  19132.         TooltipID                    : 'EBMulticommunityTooltipID_CT2384137'
  19133.     },
  19134.     
  19135.     IsTooltipShown  : false,
  19136.     DontShowTooltip : false,
  19137.  
  19138.     
  19139.     OnClickMainButton : function()
  19140.     {
  19141.         this.ClearTimeout();
  19142.         EBUsageMyConduit_CT2384137.OnOpenDropDownMenu();
  19143.         
  19144.         //star
  19145.         this.RemoveMainButtonStar();
  19146.         
  19147.         var menuButton    = EBMCMenu_CT2384137.xulMenuObj;
  19148.         var strImage    = EBImageHandler_CT2384137.GetImageName(menuButton);
  19149.  
  19150.         if(strImage == oToolbarSkin_CT2384137.groupInactiveImageUrl)
  19151.         {
  19152.             this.ClearTimeout();
  19153.             EBImageHandler_CT2384137.SetNewImage(menuButton,oToolbarSkin_CT2384137.groupInactiveImageUrl);
  19154.         }
  19155.         else if(strImage == this.Consts.CandidateIcon)
  19156.             this.CandidateDetected();
  19157.         else
  19158.             this.CommunitiesDetectedStop();
  19159.     },
  19160.     
  19161.     CommunitiesDetected : function()
  19162.     {
  19163.         this.ClearTimeout();
  19164.         var menuButton = EBMCMenu_CT2384137.xulMenuObj;
  19165.         EBImageHandler_CT2384137.SetNewImage(menuButton,oToolbarSkin_CT2384137.groupFlashingIconUrl);
  19166.         this.Consts.TimeoutFuncRef = setTimeout("EBMCButtonManager_CT2384137.CommunitiesDetectedStop()",12000);
  19167.         EBUsageMyConduit_CT2384137.ToolbarDetected();
  19168.     },
  19169.     
  19170.     CommunitiesDetectedStop : function()
  19171.     {
  19172.         var menuButton = EBMCMenu_CT2384137.xulMenuObj;
  19173.         EBImageHandler_CT2384137.SetNewImage(menuButton,oToolbarSkin_CT2384137.groupActiveImageUrl);
  19174.     },
  19175.     
  19176.     CandidateDetected : function()
  19177.     {
  19178.         
  19179.         var menuButton = EBMCMenu_CT2384137.xulMenuObj;
  19180.         EBImageHandler_CT2384137.SetNewImage(menuButton,this.Consts.CandidateIcon);
  19181.     },
  19182.     
  19183.     CommunitiesNotDetected : function()
  19184.     {
  19185.         this.ClearTimeout();
  19186.         var menuButton = EBMCMenu_CT2384137.xulMenuObj;
  19187.         
  19188.         if(!menuButton) return;
  19189.         
  19190.         EBImageHandler_CT2384137.SetNewImage(menuButton,oToolbarSkin_CT2384137.groupInactiveImageUrl);
  19191.         
  19192.         var strBaseUrl = null;
  19193.         
  19194.         EBMCMenu_CT2384137.CommunitiesNotDetected(strBaseUrl);
  19195.     },
  19196.     
  19197.     ClearTimeout : function()
  19198.     {
  19199.         try
  19200.         {
  19201.             clearTimeout(this.Consts.TimeoutFuncRef);
  19202.         }
  19203.         catch(ex){}
  19204.     },
  19205.     
  19206.     SetMainButtonStar : function()
  19207.     {
  19208.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  19209.                         .getService(Components.interfaces.nsIWindowMediator);
  19210.  
  19211.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  19212.         while (objEnumerator.hasMoreElements()) {
  19213.             var objWindow = objEnumerator.getNext();
  19214.             if (objWindow.EBMCButtonManager_CT2384137._SetMainButtonStar) {
  19215.                 objWindow.EBMCButtonManager_CT2384137._SetMainButtonStar();
  19216.             }
  19217.         }
  19218.     },
  19219.  
  19220.     RemoveMainButtonStar: function() {
  19221.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  19222.                         .getService(Components.interfaces.nsIWindowMediator);
  19223.  
  19224.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  19225.         while (objEnumerator.hasMoreElements()) {
  19226.             var objWindow = objEnumerator.getNext();
  19227.             if (objWindow.EBMCButtonManager_CT2384137._RemoveMainButtonStar) {
  19228.                 objWindow.EBMCButtonManager_CT2384137._RemoveMainButtonStar();
  19229.             }
  19230.         }
  19231.     },
  19232.  
  19233.     _SetMainButtonStar: function() {
  19234.         var menuButton = EBMCMenu_CT2384137.xulMenuObj;
  19235.         EBImageHandler_CT2384137.SetStar(menuButton);
  19236.     },
  19237.  
  19238.  
  19239.     _RemoveMainButtonStar: function() {
  19240.         var menuButton = EBMCMenu_CT2384137.xulMenuObj;
  19241.         EBImageHandler_CT2384137.RemoveStar(menuButton);
  19242.     },
  19243.  
  19244.     // +++++++++++++++++++++++ POPUP ++++++++++++++++++++++++++
  19245.     ShowPopup: function(arrA) {
  19246.         if (this.IsTooltipShown || this.DontShowTooltip) {
  19247.             this.DontShowTooltip = false;
  19248.             return;
  19249.         }
  19250.  
  19251.         var bShow = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipShow);
  19252.         bShow = (bShow == null) ? true : bShow;
  19253.         if (!bShow) {
  19254.             return;
  19255.         }
  19256.  
  19257.         var menuButton = EBMCMenu_CT2384137.xulMenuObj;
  19258.         var x = menuButton.boxObject.screenX;
  19259.         var y = menuButton.boxObject.screenY + menuButton.boxObject.height;
  19260.         var strUrls = '';
  19261.         for (var i = 0; i < arrA.length; i++) {
  19262.             strUrls += arrA[i].url;
  19263.             if (i < arrA.length - 1) {
  19264.                 strUrls += ' ';
  19265.             }
  19266.         }
  19267.         var width = (EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipWidth)) ? EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipWidth) : EBMCDialog_CT2384137.Consts.BrowserWidth;
  19268.         var height = (EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipHeight)) ? EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipHeight) : EBMCDialog_CT2384137.Consts.BrowserHeight;
  19269.  
  19270.         //open dialog with timeout, if not, it will self close before even shown, 
  19271.         //because of the onblur=window.close of the dialog
  19272.         var iTimeout = parseInt(Math.random() * 100) + 1;
  19273.         setTimeout(function() { EBMCDialog_CT2384137.OpenDetectedDialog(strUrls, x, y, parseInt(width), parseInt(height)); }, iTimeout);
  19274.         
  19275.         window.addEventListener("click", EBMCDialog_CT2384137.OnExternalClick, false);
  19276.     }
  19277.     // +++++++++++++++++++++++ POPUP ++++++++++++++++++++++++++
  19278. };
  19279.  
  19280. function EBCommunitiesList_CT2384137(objUserCommunities,objGroupingCommunities,objRecentCommunities)
  19281. {
  19282.     //Original Info, with duplicates
  19283.     this.UserCommunities        = objUserCommunities;
  19284.     this.GroupingCommunities    = objGroupingCommunities;
  19285.     this.RecentCommunities      = objRecentCommunities;
  19286.     
  19287.     //Info without duplication
  19288.     this.User                   = null;
  19289.     this.Grouping               = null;
  19290.     this.Recent                 = null;
  19291.     
  19292.     //Info without duplication for options dialog (without recent)
  19293.     this.GroupingDialog         = null;
  19294.     this.UserDialog             = null;
  19295.     
  19296.     
  19297.     //Hash for all communities
  19298.     this.AllCommunities = null;
  19299.  
  19300.     this.Init = function() {
  19301.         var oCommunity = null;
  19302.         this.AllCommunities = new EBArrayHashObject_CT2384137();
  19303.         var i;
  19304.  
  19305.         //Init Recent List
  19306.         if (this.RecentCommunities && !this.RecentCommunities.IsEmpty()) {
  19307.             this.Recent = new EBRecentCommunityList_CT2384137(null, this.RecentCommunities.FullFilePath)
  19308.             for (i = 0; i < this.RecentCommunities.Count(); i++) {
  19309.                 oCommunity = this.RecentCommunities.GetByIndex(i);
  19310.                 if (!this.AllCommunities.Contains(oCommunity.CTID) && oCommunity.Status == 0) {
  19311.                     this.AllCommunities.Add(oCommunity.CTID, oCommunity);
  19312.                     this.Recent.Add(oCommunity);
  19313.                 }
  19314.             }
  19315.         }
  19316.  
  19317.         //Init Grouping List
  19318.         if (this.GroupingCommunities && !this.GroupingCommunities.IsEmpty()) {
  19319.             this.Grouping = new EBMCCommunityList_CT2384137(null, this.GroupingCommunities.FullFilePath)
  19320.  
  19321.             for (i = 0; i < this.GroupingCommunities.Count(); i++) {
  19322.                 oCommunity = this.GroupingCommunities.GetByIndex(i);
  19323.                 if (!this.AllCommunities.Contains(oCommunity.CTID) && oCommunity.Status == 0) {
  19324.                     this.AllCommunities.Add(oCommunity.CTID, oCommunity);
  19325.                     this.Grouping.Add(oCommunity);
  19326.                 }
  19327.             }
  19328.         }
  19329.  
  19330.         //Init User List
  19331.         if (this.UserCommunities && !this.UserCommunities.IsEmpty()) {
  19332.             this.User = new EBMCCommunityList_CT2384137(null, this.UserCommunities.FullFilePath)
  19333.  
  19334.             for (i = 0; i < this.UserCommunities.Count(); i++) {
  19335.                 oCommunity = this.UserCommunities.GetByIndex(i);
  19336.                 if (!this.AllCommunities.Contains(oCommunity.CTID) && oCommunity.Status == 0) {
  19337.                     this.AllCommunities.Add(oCommunity.CTID, oCommunity);
  19338.                     this.User.Add(oCommunity);
  19339.                 }
  19340.             }
  19341.         }
  19342.  
  19343.         //Add Original toolbar object to AllCommunities object
  19344.         var strOriginalToolbarXml = '<COMMUNITY>';
  19345.         strOriginalToolbarXml += '<CTID>' + EBGlobalConsts_CT2384137.ToolbarCTID + '</CTID>';
  19346.         strOriginalToolbarXml += '<NAME>' + EBGlobalConsts_CT2384137.ToolbarName + '</NAME>';
  19347.         strOriginalToolbarXml += '<DESCRIPTION></DESCRIPTION>';
  19348.         strOriginalToolbarXml += '<TAGS></TAGS>';
  19349.         strOriginalToolbarXml += '<INSTALLATION_URL>' + EBGlobalConsts_CT2384137.WebServerUrl.replace(/http:\/\//, '') + '</INSTALLATION_URL>';
  19350.         strOriginalToolbarXml += '</COMMUNITY>';
  19351.  
  19352.         var xmlOriginalToolbar = EBXML_CT2384137.GetXmlDocument(strOriginalToolbarXml);
  19353.         xmlOriginalToolbar = xmlOriginalToolbar.documentElement;
  19354.  
  19355.         var oToolbar = new EBMCCommunityList_CT2384137(xmlOriginalToolbar, '');
  19356.         this.AllCommunities.Add(oToolbar.CTID, oToolbar);
  19357.     };
  19358.  
  19359.     this.InitForDialog = function() {
  19360.         var oCommunity = null;
  19361.         var DialogAllCommunities = new EBArrayHashObject_CT2384137();
  19362.         var i;
  19363.         
  19364.         //Init Grouping List
  19365.         if (this.GroupingCommunities && !this.GroupingCommunities.IsEmpty()) {
  19366.             this.GroupingDialog = new EBMCCommunityList_CT2384137(null, this.GroupingCommunities.FullFilePath)
  19367.  
  19368.             for (i = 0; i < this.GroupingCommunities.Count(); i++) {
  19369.                 oCommunity = this.GroupingCommunities.GetByIndex(i);
  19370.                 if (!DialogAllCommunities.Contains(oCommunity.CTID) &&
  19371.                     oCommunity.Status != 2) {
  19372.                     DialogAllCommunities.Add(oCommunity.CTID, oCommunity);
  19373.                     this.GroupingDialog.Add(oCommunity);
  19374.                 }
  19375.             }
  19376.         }
  19377.  
  19378.         //Init User List
  19379.         if (this.UserCommunities && !this.UserCommunities.IsEmpty()) {
  19380.             this.UserDialog = new EBMCCommunityList_CT2384137(null, this.UserCommunities.FullFilePath)
  19381.  
  19382.             for (i = 0; i < this.UserCommunities.Count(); i++) {
  19383.                 oCommunity = this.UserCommunities.GetByIndex(i);
  19384.                 if (!DialogAllCommunities.Contains(oCommunity.CTID)) {
  19385.                     DialogAllCommunities.Add(oCommunity.CTID, oCommunity);
  19386.                     this.UserDialog.Add(oCommunity);
  19387.                 }
  19388.             }
  19389.         }
  19390.  
  19391.         //Init Recent List
  19392.         if (this.RecentCommunities && !this.RecentCommunities.IsEmpty()) {
  19393.             if (!this.UserDialog) {
  19394.                 this.UserDialog = new EBMCCommunityList_CT2384137(null, this.UserCommunities.FullFilePath)
  19395.             }
  19396.  
  19397.             for (i = 0; i < this.RecentCommunities.Count(); i++) {
  19398.                 oCommunity = this.RecentCommunities.GetByIndex(i);
  19399.                 if (!DialogAllCommunities.Contains(oCommunity.CTID)) {
  19400.                     DialogAllCommunities.Add(oCommunity.CTID, oCommunity);
  19401.                     this.UserDialog.Add(oCommunity);
  19402.                 }
  19403.             }
  19404.         }
  19405.  
  19406.     };
  19407.  
  19408.     this.CommunitySelected = function(strCTID) {
  19409.         //if original toolbar selected, don't insert it to any list
  19410.         if (strCTID == EBGlobalConsts_CT2384137.ToolbarCTID) return;
  19411.  
  19412.         var oCommunity = null;
  19413.         //if this community from grouping, add it to user and recent list
  19414.         if (this.Grouping && this.Grouping.Contains(strCTID)) {
  19415.             oCommunity = this.Grouping.GetByID(strCTID);
  19416.             this.RecentCommunities.Add(oCommunity);
  19417.             if (!this.UserCommunities) {
  19418.                 var strFullFilePath = EBMCConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + EBMCConsts_CT2384137.CommunitiesFileName;
  19419.                 this.UserCommunities = new EBMCCommunityList_CT2384137(null, strFullFilePath);
  19420.             }
  19421.             this.UserCommunities.Add(oCommunity);
  19422.             this.UserCommunities.SaveToFile();
  19423.             this.RecentCommunities.SaveToFile();
  19424.  
  19425.         }
  19426.         //else, add it to recent list only
  19427.         else {
  19428.             oCommunity = this.AllCommunities.GetByID(strCTID);
  19429.             this.RecentCommunities.Add(oCommunity);
  19430.             this.RecentCommunities.SaveToFile();
  19431.         }
  19432.     };
  19433.  
  19434.     this.IsExists = function(strUrl) {
  19435.         var oCommunity = this.GetCommunityByInstallationUrl(strUrl);
  19436.  
  19437.         return (oCommunity) ? true : false;
  19438.     };
  19439.  
  19440.     this.GetCommunityByCTID = function(strCTID) {
  19441.         return this.AllCommunities.GetByID(strCTID);
  19442.     };
  19443.  
  19444.     this.GetCTIDByInstallationUrl = function(strUrl) {
  19445.         var oCommunity = this.GetCommunityByInstallationUrl(strUrl);
  19446.  
  19447.         return (oCommunity) ? oCommunity.CTID : null;
  19448.     };
  19449.  
  19450.     this.GetCommunityByInstallationUrl = function(strUrl) {
  19451.         var strCommunityName = EBMCManager_CT2384137.GetCommunityNameFromInstallationUrl(strUrl)
  19452.         var strName = '';
  19453.         var oCommunity = null;
  19454.  
  19455.         for (var i = 0; i < this.AllCommunities.Count(); i++) {
  19456.             oCommunity = this.AllCommunities.GetByIndex(i);
  19457.             strName = EBMCManager_CT2384137.GetCommunityNameFromInstallationUrl(oCommunity.InstallationUrl)
  19458.             if (strCommunityName.toLowerCase() == strName.toLowerCase()) {
  19459.                 return oCommunity;
  19460.             }
  19461.         }
  19462.  
  19463.         return null;
  19464.     };
  19465.  
  19466.     this.GetAllCTIDCommaSeparatedString = function() {
  19467.         var strCTIDs = '';
  19468.         var oCommunity = null
  19469.         var arrLen = this.AllCommunities.Count();
  19470.         for (var i = 0; i < arrLen; i++) {
  19471.             oCommunity = this.AllCommunities.GetByIndex(i);
  19472.             strCTIDs += oCommunity.CTID;
  19473.             if (i < arrLen - 1) {
  19474.                 strCTIDs += ',';
  19475.             }
  19476.         }
  19477.  
  19478.         return strCTIDs;
  19479.     };
  19480.  
  19481.     this.UpdateGrouping = function(oGrouping) {
  19482.         this.GroupingCommunities = oGrouping;
  19483.         this.Init();
  19484.     };
  19485.  
  19486.     this.UpdateCurrentGrouping = function(oCommunities) {
  19487.         var oCommunity = null;
  19488.         var oExistingCommunity = null;
  19489.  
  19490.         for (var i = 0; i < oCommunities.Count(); i++) {
  19491.             oCommunity = oCommunities.GetByIndex(i);
  19492.             if (!this.UserCommunities.Contains(oCommunity.CTID) && oCommunity.CTID != EBGlobalConsts_CT2384137.ToolbarCTID) {
  19493.                 this.UserCommunities.Add(oCommunity);
  19494.             }
  19495.         }
  19496.         this.UserCommunities.SaveToFile();
  19497.         this.Init();
  19498.     };
  19499.  
  19500.     this.Count = function() {
  19501.         return this.AllCommunities.Count();
  19502.     };
  19503.     
  19504.     //Init and fill communities
  19505.     this.Init();
  19506. };
  19507. //Radio Media Class
  19508. function EBMCCommunity_CT2384137(XMLNode)
  19509. {
  19510.     this.CTID               = '';
  19511.     this.Name               = '';
  19512.     this.Description        = '';
  19513.     this.Tags               = '';
  19514.     this.InstallationUrl    = '';
  19515.     this.Status = 0;
  19516.     this.Locale = "";
  19517.  
  19518.     this.Init = function(XMLNode) {
  19519.         var XMLNodeChild = null;
  19520.  
  19521.         for (var i = 0; i < XMLNode.childNodes.length; i++) {
  19522.             XMLNodeChild = XMLNode.childNodes[i];
  19523.  
  19524.             if (XMLNodeChild.tagName == EBMCConsts_CT2384137.xmlTags.CTID)
  19525.                 this.CTID = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19526.             else if (XMLNodeChild.tagName == EBMCConsts_CT2384137.xmlTags.Name)
  19527.                 this.Name = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19528.             else if (XMLNodeChild.tagName == EBMCConsts_CT2384137.xmlTags.Description)
  19529.                 this.Description = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19530.             else if (XMLNodeChild.tagName == EBMCConsts_CT2384137.xmlTags.Tags)
  19531.                 this.Tags = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19532.             else if (XMLNodeChild.tagName == EBMCConsts_CT2384137.xmlTags.InstallUrl)
  19533.                 this.InstallationUrl = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19534.             else if (XMLNodeChild.tagName == EBMCConsts_CT2384137.xmlTags.Locale)
  19535.                 this.Locale = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19536.         }
  19537.         this.Status = this.GetCommunityStatus(this.CTID);
  19538.     };
  19539.         
  19540.     this.GetCommunityStatus = function(strCTID)
  19541.     {
  19542.         var strStatusBranch = EBMCConsts_CT2384137.CommunitiesStatusBranch;
  19543.         var strPrefName     = strStatusBranch + '.' + strCTID;
  19544.         var iStatus         = EBToolbarPreferenceManager_CT2384137.GetPref(strPrefName);
  19545.         if(!iStatus)
  19546.             iStatus = 0;
  19547.  
  19548.         return iStatus;
  19549.     };
  19550.     
  19551.     this.Update = function(CTID,Name,Description,Tags,InstallationUrl)
  19552.     {
  19553.         this.CTID                = CTID;
  19554.         this.Name                = Name;
  19555.         this.Description        = Description;
  19556.         this.Tags                = Tags;
  19557.         this.InstallationUrl    = InstallationUrl;
  19558.     };
  19559.     
  19560.     this.toXML = function()
  19561.     {
  19562.         return EBXML_CT2384137.GetXmlDocument(this.toXMLString);
  19563.     };
  19564.     
  19565.     this.toXMLString = function()
  19566.     {
  19567.         var strXML =  EBXML_CT2384137.CreateXmlNodeStartString(EBMCConsts_CT2384137.xmlTags.Community);
  19568.             strXML += EBXML_CT2384137.CreateXmlNodeString(EBMCConsts_CT2384137.xmlTags.CTID,         this.CTID);
  19569.             strXML += EBXML_CT2384137.CreateXmlNodeString(EBMCConsts_CT2384137.xmlTags.Name,         this.Name);
  19570.             strXML += EBXML_CT2384137.CreateXmlNodeString(EBMCConsts_CT2384137.xmlTags.Description,  this.Description);
  19571.             strXML += EBXML_CT2384137.CreateXmlNodeString(EBMCConsts_CT2384137.xmlTags.Tags,         this.Tags);
  19572.             strXML += EBXML_CT2384137.CreateXmlNodeString(EBMCConsts_CT2384137.xmlTags.InstallUrl, this.InstallationUrl);
  19573.             strXML += EBXML_CT2384137.CreateXmlNodeString(EBMCConsts_CT2384137.xmlTags.Locale, this.Locale);
  19574.             strXML += EBXML_CT2384137.CreateXmlNodeEndString(EBMCConsts_CT2384137.xmlTags.Community);
  19575.         
  19576.         return strXML;
  19577.     };
  19578.     
  19579.     this.SetStatus = function(iStatus)
  19580.     {
  19581.         this.Status = iStatus;
  19582.         var strStatusBranch = EBMCConsts_CT2384137.CommunitiesStatusBranch;
  19583.         var strPrefName     = strStatusBranch + '.' + this.CTID;
  19584.         EBToolbarPreferenceManager_CT2384137.SetPref(strPrefName,iStatus);
  19585.     };
  19586.  
  19587.  
  19588.     this.toListItem = function(bIsGrouping, doc) {
  19589.         if (this.Status == 2) return null;
  19590.         
  19591.         var strDisplayText = this.Name;
  19592.         var strDisplayIcon = EBMCDialog_CT2384137.Consts.DialogIcon;
  19593.         var strCheckBoxID = this.CTID;
  19594.  
  19595.         var objListItem = doc.createElement("listitem");
  19596.         var objCheckBox = doc.createElement("listcell");
  19597.         var objTextImage = doc.createElement("listcell");
  19598.  
  19599.         objListItem.setAttribute('allowevents', 'true');
  19600.         objListItem.setAttribute('style', 'height:20px');
  19601.         objListItem.setAttribute('EB_GROUPING', bIsGrouping);
  19602.         objListItem.setAttribute('id', strCheckBoxID);
  19603.  
  19604.         objCheckBox.setAttribute('type', 'checkbox');
  19605.         objCheckBox.addEventListener("click", function(event) { EBMCDialog_CT2384137.ListItem_OnClickCheckBox(event); }, false);
  19606.  
  19607.         objTextImage.setAttribute('image', strDisplayIcon);
  19608.         objTextImage.setAttribute('label', strDisplayText);
  19609.         objTextImage.setAttribute('class', 'listcell-iconic');
  19610.         objTextImage.addEventListener("mouseover", function(event) { EBMCDialog_CT2384137.ListItem_MouseOver(this); }, false);
  19611.         objTextImage.addEventListener("mouseout", function(event) { EBMCDialog_CT2384137.ListItem_MouseOut(this); }, false);
  19612.  
  19613.  
  19614.  
  19615.         var isChecked = (this.Status == 0) ? true : false
  19616.         objCheckBox.setAttribute('checked', isChecked.toString());
  19617.  
  19618.         objListItem.appendChild(objCheckBox);
  19619.         objListItem.appendChild(objTextImage);
  19620.         return objListItem;
  19621.     };
  19622. };
  19623. function EBMCCommunityList_CT2384137(XMLNode,strFullFilePath)
  19624. {
  19625.     this.CommunitiesHash = new EBArrayHashObject_CT2384137();
  19626.     
  19627.     this.Caption        = '';
  19628.     this.IconUrl        = '';
  19629.     this.Hint            = '';
  19630.     this.FullFilePath = '';
  19631.     
  19632.     this.InitList = function(XMLNode)
  19633.     {
  19634.         var oCommunity    = null;
  19635.         this.isList        = true;
  19636.         
  19637.         var XMLNodeChild = null;
  19638.         for(var i=0;i<XMLNode.childNodes.length;i++)
  19639.         {
  19640.             XMLNodeChild = XMLNode.childNodes[i];
  19641.             if(XMLNodeChild.tagName == 'COMMUNITY')
  19642.             {
  19643.                 oCommunity = new EBMCCommunityList_CT2384137(XMLNodeChild);
  19644.                 this.CommunitiesHash.Add(oCommunity.CTID, oCommunity);
  19645.             }
  19646.             else if(XMLNodeChild.tagName == 'COMMUNITIES')
  19647.             {
  19648.                 oCommunity = new EBMCCommunityList_CT2384137(XMLNodeChild)
  19649.                 this.CommunitiesHash.Add("CommunityList"+i,oCommunity);
  19650.             }
  19651.             else if(XMLNodeChild.tagName == 'CAPTION')
  19652.                 this.Caption = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19653.             else if(XMLNodeChild.tagName == 'ICON_URL')
  19654.                 this.IconUrl = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19655.             else if(XMLNodeChild.tagName == 'HINT')
  19656.                 this.Hint = EBXML_CT2384137.GetXmlNodeValue(XMLNodeChild);
  19657.             
  19658.         }
  19659.         oCommunity = null;
  19660.     };
  19661.     
  19662.     this.toXML = function()
  19663.     {
  19664.         var strXml = this.toString();
  19665.         var xmlDoc = EBXML_CT2384137.GetXmlDocument(strXml);
  19666.         return xmlDoc;
  19667.     };
  19668.     
  19669.     this.toString = function()
  19670.     {
  19671.         var oCommunity    = '';
  19672.         var strXML        = '<COMMUNITIES>';
  19673.         
  19674.         for(var i=0;i<this.CommunitiesHash.Count();i++)
  19675.         {
  19676.             oCommunity = this.CommunitiesHash.GetByIndex(i);
  19677.             strXML += oCommunity.toXMLString();
  19678.         }
  19679.         
  19680.         strXML += '</COMMUNITIES>';
  19681.         strXML = EBXML_CT2384137.LegalizeEBXML(strXML);
  19682.         return strXML;
  19683.     };
  19684.     
  19685.     this.SaveToFile = function()
  19686.     {
  19687.         var strXml = this.toString();
  19688.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(this.FullFilePath);
  19689.         EBFileIO_CT2384137.write(oFile,strXml,'',EBGlobalConsts_CT2384137.DefaultCharset);
  19690.     };
  19691.     
  19692.     this.Add = function(oCommunity)
  19693.     {
  19694.         if(!this.Contains(oCommunity.CTID))
  19695.             this.CommunitiesHash.Add(oCommunity.CTID,oCommunity);
  19696.     };
  19697.     
  19698.     this.AddFirst = function(oCommunity)
  19699.     {
  19700.         if(!this.Contains(oCommunity.CTID))
  19701.             this.CommunitiesHash.Insert(0,oCommunity.CTID,oCommunity);
  19702.     };
  19703.     
  19704.     this.GetByIndex = function(iIndex)
  19705.     {
  19706.         return this.CommunitiesHash.GetByIndex(iIndex);
  19707.     };
  19708.     
  19709.     this.Count = function()
  19710.     {
  19711.         return this.CommunitiesHash.Count();
  19712.     };
  19713.     
  19714.     this.Remove = function(oCommunity)
  19715.     {
  19716.         if(this.Contains(oCommunity.CTID))
  19717.         {
  19718.             var index = this.GetIndexByCommunity(oCommunity)
  19719.             this.CommunitiesHash.Remove(index,oCommunity.CTID);
  19720.         }    
  19721.     };
  19722.     
  19723.     this.GetIndexByCommunity = function(oCommunity)
  19724.     {
  19725.         var iCommunity = null;
  19726.         
  19727.         for(var i=0;this.CommunitiesHash.Count();i++)
  19728.         {
  19729.             iCommunity = this.CommunitiesHash.GetByIndex(i);
  19730.             if(iCommunity.CTID == oCommunity.CTID)
  19731.             {
  19732.                 return i;
  19733.             }
  19734.         }
  19735.         
  19736.         return -1;
  19737.     };
  19738.     
  19739.     this.CommunityList = function()
  19740.     {
  19741.         return this.CommunitiesHash;
  19742.     };
  19743.     
  19744.     this.GetCommunityListFromArray = function(arrCommunity)
  19745.     {
  19746.         var arr = new EBArrayHashObject_CT2384137();
  19747.         var oCommunity = null;
  19748.         
  19749.         for(var i=0;i<arrCommunity.Count();i++)
  19750.         {
  19751.             oCommunity = arrCommunity.GetByIndex(i);
  19752.             if(oCommunity.isList)
  19753.             {
  19754.                 arr.Add('CommunityList'+i,oCommunity.arrCommunity);
  19755.             }
  19756.         }
  19757.         return arr;
  19758.     };
  19759.     
  19760.     this.IsEmpty = function()
  19761.     {
  19762.         return (this.CommunitiesHash.Count() == 0) ? true : false;
  19763.     };
  19764.     
  19765.     this._Contains = function(CTID,arrCommunity)
  19766.     {
  19767.         if(arrCommunity.Contains(CTID)) return true;
  19768.         else
  19769.         {
  19770.             
  19771.             var arrCommunityList = this.GetCommunityListFromArray(arrCommunity);
  19772.             for(var i=0;i<arrCommunityList.Count();i++)
  19773.             {
  19774.                 if(this._Contains(CTID,arrCommunityList.GetByIndex(i)))
  19775.                     return true;
  19776.             }
  19777.         }
  19778.         return false;
  19779.     };
  19780.     
  19781.     this.Contains = function(CTID)
  19782.     {
  19783.         if(this.CommunitiesHash.Count() == 0) return false;
  19784.         
  19785.         return this._Contains(CTID,this.CommunitiesHash);
  19786.     };
  19787.     
  19788.     this._GetByID = function(CTID,arrCommunity)
  19789.     {
  19790.         var oCommunity = arrCommunity.GetByID(CTID);
  19791.         if(oCommunity) return oCommunity;
  19792.         else
  19793.         {
  19794.             var arrCommunityList = this.GetCommunityListFromArray(arrCommunity);
  19795.             for(var i=0;i<arrCommunityList.Count();i++)
  19796.             {
  19797.                 oCommunity = this._GetByID(CTID,arrCommunityList.GetByIndex(i));
  19798.                 if(oCommunity)
  19799.                     return oCommunity;
  19800.             }
  19801.             return null;
  19802.         }
  19803.         return null;
  19804.     };
  19805.     
  19806.     this.GetByID = function(CTID)
  19807.     {
  19808.         return this._GetByID(CTID,this.CommunitiesHash);
  19809.     };
  19810.     
  19811.     // startup point
  19812.     if(XMLNode && XMLNode.tagName == 'COMMUNITY') 
  19813.         this.Init(XMLNode);
  19814.     else if(XMLNode)
  19815.         this.InitList(XMLNode,strFullFilePath);
  19816.     
  19817.     this.FullFilePath   = strFullFilePath;
  19818. };
  19819.  
  19820. EBMCCommunityList_CT2384137.prototype = new EBMCCommunity_CT2384137;
  19821. var EBMCConsts_CT2384137 = 
  19822. {
  19823.     BaseGroupingServiceUrl: "http://grouping.services.conduit.com/",
  19824.     CommunityServiceServerUrl                : 'CommunityRequest.ctp?type=GetCommunity&CommunityPage=',
  19825.     GroupServiceServerUrl                    : 'GroupingRequest.ctp?type=GetGroup&ctid=CTxxxx&lut=',
  19826.     CommunitiesCheckServerUrl                : 'GroupingRequest.ctp?type=ToolbarsInfo',
  19827.     DownloadDomainsServerUrl                : 'Domains/DomainsManager.asmx/GetDomains?LastUpdateTime=',
  19828.     InvalidateCacheParam                    : '&ic=true',
  19829.     CommunitySearchUrl                        : 'http://search.conduit.com/?ctid=EB_TOOLBAR_ID&octid=EB_ORIGINAL_CTID&is=1&iss=1&q=',
  19830.     FolderName                                : 'communities',
  19831.     CommunitiesFileName                        : 'Communities.xml',
  19832.     GroupFileName                            : 'CommunitiesGroup.xml',
  19833.     RecentFileName                            : 'RecentCommunities.xml',
  19834.     DownloadDomainsFileName                 : 'DownloadDomains.xml',
  19835.     ExcludedDomainsFileName                 : 'ExcludedDomains.xml',
  19836.     CommunitiesXMLRootTag                    : '<COMMUNITIES/>',
  19837.     GroupNotModified                        : 'NOT_MODIFIED',
  19838.     Modified                                : 'MODIFIED',
  19839.     GroupingServerCheckInterval                : 1440, //minutes
  19840.     GroupingServerOnErrorInterval            : 720, //minutes
  19841.     DeletedGroupingBranch                   : 'DeletedGroupingToolbars',
  19842.     DownloadDomainsServerCheckInterval      : 168, //hours (7 days)
  19843.     DownloadDomainsErrorServerCheckInterval : 3, //hours (3 hours)
  19844.     ERROR_REPLY                             : 'ERROR_REPLY',
  19845.     UrlParameter_CTIDs                      : '&ctids=',
  19846.     CommunitiesStatusBranch                 : 'CommunitiesStatus',
  19847.     
  19848.     xmlTags :
  19849.     {
  19850.         CTID                        : 'CTID',
  19851.         Name                        : 'NAME',
  19852.         Description                    : 'DESCRIPTION',
  19853.         Tags                        : 'TAGS',
  19854.         InstallUrl                    : 'INSTALLATION_URL',
  19855.         GroupingXMLRootTagName        : 'GROUPING',
  19856.         LastUpdateTime                : 'LAST_UPDATE_TIME',
  19857.         VisualLastUpdateTime        : 'VISUAL_LAST_UPDATE_TIME',
  19858.         AlertChannelId              : 'ALERT_CHANNEL_ID',
  19859.         Communities                    : 'COMMUNITIES',
  19860.         DownloadDomains             : 'DOMAINS',
  19861.         DownloadDomain              : 'DOMAIN',
  19862.         ExcludedDomains             : 'EXCLUDED_DOMAINS',
  19863.         Interval                    : 'INTERVAL_IN_HOURS',
  19864.         Flags                       : 'FLAGS',
  19865.         Community                   : 'COMMUNITY',
  19866.         Locale: "LOCALE"
  19867.     },
  19868.     
  19869.     CommunityFileType :
  19870.     {
  19871.         User        : 'user',
  19872.         Grouping    : 'grouping',
  19873.         Recent      : 'recent'
  19874.     }
  19875. };
  19876.  
  19877.  
  19878. var EBMCDetect_CT2384137 =
  19879. {
  19880.  
  19881.     ArrDomainsList: null,
  19882.     ArrExcludedDomainsList: null,
  19883.     strSuffix1: "/exe",
  19884.     strSuffix2: "/xpi",
  19885.  
  19886.     Init: function(arrDomainsList, arrExcludedDomainsList) {
  19887.         //update download domains
  19888.         if (arrDomainsList)
  19889.             this.ArrDomainsList = arrDomainsList;
  19890.         else
  19891.             this.ArrDomainsList = new Array("qatoolbar.com", "ourtoolbar.com", "communitytoolbars.com", "forumtoolbar.com",
  19892.                             "myblogtoolbar.com", "mycitytoolbar.com", "mycollegetoolbar.com", "myfamilytoolbar.com",
  19893.                             "myforumtoolbar.com", "mylibrarytoolbar.com", "myradiotoolbar.com", "mystoretoolbar.com",
  19894.                             "mytowntoolbar.com", "myuniversitytoolbar.com", "ourchurchtoolbar.com", "myxangatoolbar.com",
  19895.                             "media-toolbar.com", "loyaltytoolbar.com", "myteamtoolbar.com", "greattoolbars.com",
  19896.                             "ourorganizationtoolbar.com", "ourbusinesstoolbar.com");
  19897.  
  19898.         //update excluded domains                            
  19899.         if (arrExcludedDomainsList)
  19900.             this.ArrExcludedDomainsList = arrExcludedDomainsList;
  19901.         else
  19902.             this.ArrExcludedDomainsList = new Array("search.conduit.com", "search15.conduit.com", "search16.conduit.com",
  19903.                                                 "accounts.conduit.com", "translation.conduit.com")
  19904.  
  19905.     },
  19906.  
  19907.     UpdateDomainsList: function(arrDownloadDomainsList, arrExcludedDomainsList) {
  19908.         if (arrDownloadDomainsList)
  19909.             this.ArrDomainsList = arrDownloadDomainsList;
  19910.  
  19911.         if (arrExcludedDomainsList)
  19912.             this.ArrExcludedDomainsList = arrExcludedDomainsList;
  19913.     },
  19914.  
  19915.     IsExcludedDomain: function(strTLD) {
  19916.         if (!this.ArrDomainsList)
  19917.             this.Init(null, null)
  19918.  
  19919.         if (strTLD.toLowerCase() == "conduit" ||
  19920.             strTLD.toLowerCase() == "google" ||
  19921.             strTLD.toLowerCase() == "yahoo" ||
  19922.             strTLD.toLowerCase() == "search" ||
  19923.             strTLD.toLowerCase() == "msn"
  19924.           ) {
  19925.             return true;
  19926.         }
  19927.  
  19928.         for (var i = 0; i < this.ArrDomainsList.length; i++) {
  19929.             if (this.ArrDomainsList[i].indexOf(strTLD.toLowerCase()) != -1) {
  19930.                 return true;
  19931.             }
  19932.         }
  19933.  
  19934.         return false;
  19935.  
  19936.     },
  19937.  
  19938.     IsDownloadLink: function(strHref) {
  19939.         if (!this.ArrDomainsList)
  19940.             this.Init(null, null)
  19941.  
  19942.         //patch for toolbar directory
  19943.         if (strHref == "http://www.ourtoolbar.com") return false;
  19944.  
  19945.         var strBaseUrl = EBUrl_CT2384137.GetBaseUrlWithoutProtocol(strHref);
  19946.         for (var i = 0; i < this.ArrDomainsList.length; i++) {
  19947.             if (strBaseUrl.toLowerCase().indexOf(this.ArrDomainsList[i]) != -1) {
  19948.                 return true;
  19949.             }
  19950.         }
  19951.         return false;
  19952.     },
  19953.  
  19954.     IsExists: function(arr, elem) {
  19955.         for (var i = 0; i < arr.length; i++) {
  19956.             if (arr[i].url == elem) {
  19957.                 return true;
  19958.             }
  19959.         }
  19960.         return false;
  19961.     },
  19962.  
  19963.     Detect: function(win) {
  19964.         var bIsExists = null;
  19965.         var arrFoundA = new Array();
  19966.  
  19967.         var arrMeta = win.document.getElementsByTagName("meta");
  19968.  
  19969.         // <meta> tag search
  19970.         var nameAttr = '';
  19971.         var contantAttr = '';
  19972.         var i;
  19973.  
  19974.         for (i = 0; i < arrMeta.length; i++) {
  19975.             nameAttr = arrMeta[i].getAttribute('name');
  19976.             if (nameAttr && nameAttr.toLowerCase() == 'toolbar') {
  19977.                 contantAttr = arrMeta[i].getAttribute('content');
  19978.                 if (contantAttr && this.IsDownloadLink(contantAttr)) {
  19979.                     contantAttr = this.ClearFoundUrl(contantAttr);
  19980.                     bIsExists = EBMCManager_CT2384137.IsCommunityExists(contantAttr);
  19981.                     if (bIsExists && EBMCManager_CT2384137.GetCTIDFromExistingCommunitiesByInstallUrl(contantAttr) != EBActionManager_CT2384137.GetCTID()
  19982.                         ||
  19983.                         !bIsExists) {
  19984.                         arrFoundA.push(new EBMCFoundObject_CT2384137(contantAttr, bIsExists));
  19985.                     }
  19986.                 }
  19987.             }
  19988.         }
  19989.  
  19990.         //if toolbar meta tags exist on page, don't check for links
  19991.         if (arrFoundA.length > 0) {
  19992.             return arrFoundA;
  19993.         }
  19994.  
  19995.         //check for links, in case of none meta tags
  19996.         var arrA = win.document.getElementsByTagName("a");
  19997.         if (arrA.length == 0 && arrMeta.length == 0) {
  19998.             return null;
  19999.         }
  20000.  
  20001.  
  20002.         var strHref = "";
  20003.         // <a> tag search
  20004.         for (i = 0; i < arrA.length; i++) {
  20005.             strHref = arrA[i].getAttribute("href");
  20006.             if (strHref && this.IsDownloadLink(strHref)) {
  20007.                 strHref = this.ClearFoundUrl(strHref);
  20008.                 if (!this.IsExists(arrFoundA, strHref)) {
  20009.                     bIsExists = EBMCManager_CT2384137.IsCommunityExists(strHref);
  20010.                     if (bIsExists && EBMCManager_CT2384137.GetCTIDFromExistingCommunitiesByInstallUrl(strHref) != EBActionManager_CT2384137.GetCTID()
  20011.                         ||
  20012.                         !bIsExists) {
  20013.                         arrFoundA.push(new EBMCFoundObject_CT2384137(strHref, bIsExists));
  20014.                     }
  20015.                 }
  20016.             }
  20017.         }
  20018.  
  20019.         if (arrFoundA.length == 0)
  20020.             arrFoundA = null;
  20021.         
  20022.         return arrFoundA;
  20023.     },
  20024.  
  20025.     IsFinalDownloadLink: function(strUrl) {
  20026.         if (strUrl.indexOf(this.strSuffix1) == strUrl.length - 4
  20027.             ||
  20028.             strUrl.indexOf(this.strSuffix2) == strUrl.length - 4) {
  20029.             return true;
  20030.         }
  20031.  
  20032.         return false;
  20033.     },
  20034.  
  20035.     CheckUrl: function(strUrl) {
  20036.         var arrFound = new Array();
  20037.         if (this.IsDownloadLink(strUrl) && this.IsFinalDownloadLink(strUrl)) {
  20038.             strUrl = this.ClearFoundUrl(strUrl);
  20039.             arrFound.push(strUrl);
  20040.         }
  20041.         return arrFound;
  20042.     },
  20043.  
  20044.     ClearFoundUrl: function(strHref) {
  20045.         strHref = strHref.replace(/http:\/\//, '');
  20046.         var iIndex = strHref.indexOf("/");
  20047.  
  20048.         if (iIndex != -1)
  20049.             strHref = strHref.slice(0, iIndex);
  20050.  
  20051.         return EBGlobalManager_CT2384137.Trim(strHref);
  20052.     },
  20053.  
  20054.     IsDontCheckThisUrl: function(strUrl) {
  20055.         if (!this.ArrExcludedDomainsList)
  20056.             this.Init(null, null);
  20057.  
  20058.         var strDomain = EBUrl_CT2384137.GetBaseUrlWithoutProtocol(strUrl);
  20059.  
  20060.         for (var i = 0; i < this.ArrExcludedDomainsList.length; i++)
  20061.             if (strDomain.indexOf(this.ArrExcludedDomainsList[i]) != -1)
  20062.             return true;
  20063.  
  20064.         return false;
  20065.     }
  20066. }
  20067.  
  20068. function EBMCFoundObject_CT2384137(strUrl,bIsExists)
  20069. {
  20070.     this.url        = strUrl;
  20071.     this.IsExists    = bIsExists;
  20072. }
  20073. var EBMCDialog_CT2384137 =
  20074. {
  20075.     Consts:
  20076.     {
  20077.         DialogFilename: 'multicommunity.xul',
  20078.         DownloadDialogFilename: 'multicommunity_download.xul',
  20079.         DetectedDialogFilename: 'multicommunity_detected.xul',
  20080.         DialogName: 'EBMulticommunityDetectedDialogName',
  20081.         DetectedDialogName: 'EBMulticommunityDetectedDialogNameDetected',
  20082.         DialogType: 'EBMulticommunityDialog_CT2384137',
  20083.         DialogIcon: 'chrome://iobitcom/skin/mc_community_dialog.png',
  20084.         DialogIcon_over: 'chrome://iobitcom/skin/mc_community_dialog_over.png',
  20085.         DownloadDialogName: 'EBMulticommunityDownloadDialogName',
  20086.         Delete_AreYouSure: 'Are you sure you want to remove ',
  20087.         BrowserWidth: 295,
  20088.         BrowserHeight: 83,
  20089.         BrowserID: 'MC_DETECTED_BROWSER_ID'
  20090.     },
  20091.  
  20092.     xulBrowser: null,
  20093.     DetectedSelectedIndex: 0,
  20094.     DetectedArrUrls: null,
  20095.     DetectedUrl: 'http://@EB_INSTALL_LINK@/Rank/Tooltip/?version=1',
  20096.     WindowCloseTimeout: null,
  20097.     WindowCloseTimeoutMillisec: 10000,
  20098.     DetectedDialogWidthDelta: 2,
  20099.     DetectedDialogHeightDelta: 51,
  20100.     DetectDialog: null,
  20101.  
  20102.     oDownBtn: null,
  20103.     oUpBtn: null,
  20104.     oDeleteBtn: null,
  20105.     oAcceptBtn: null,
  20106.     oCancelBtn: null,
  20107.     oListBox: null,
  20108.  
  20109.     dialogChanged: false,
  20110.  
  20111.     OpenDialog: function(objWindow) {
  20112.         //check if the dialog exsits to focus on it
  20113.         var oDialog = this.GetDialog();
  20114.         if (oDialog) {
  20115.             oDialog.focus();
  20116.         }
  20117.         else {
  20118.             var strChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + this.Consts.DialogFilename;
  20119.  
  20120.             objWindow.openDialog(strChromePath,
  20121.                             this.Consts.DialogName,
  20122.                             'modal,centerscreen,chrome,resizable=no');
  20123.         }
  20124.     },
  20125.  
  20126.     OpenDownloadDialog: function(strUrl) {
  20127.         var strChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + this.Consts.DownloadDialogFilename;
  20128.         window.openDialog(strChromePath,
  20129.                             this.Consts.DownloadDialogName,
  20130.                             'modal,centerscreen,chrome,resizable=no',
  20131.                             strUrl);
  20132.         EBUsageMyConduit_CT2384137.PopupShown();
  20133.     },
  20134.  
  20135.     OpenDetectedDialog: function(strUrls, dialogScreenX, dialogScreenY, width, height) {
  20136.         EBMCButtonManager_CT2384137.IsTooltipShown = true;
  20137.  
  20138.         //check if another toolbar is already showed the detection dialog
  20139.         var arrToolbars = EBActionManager_CT2384137.GetEBToolbarsCTID();
  20140.         var thatButtonManager;
  20141.         for (var i = 0; i < arrToolbars.length; i++) {
  20142.             if (arrToolbars[i].originalCTID != EBGlobalConsts_CT2384137.ToolbarCTID) {
  20143.                 thatButtonManager = window["EBMCButtonManager_" + arrToolbars[i].originalCTID];
  20144.                 if (thatButtonManager && thatButtonManager.IsTooltipShown) {
  20145.                     EBMCButtonManager_CT2384137.IsTooltipShown = false;
  20146.                     return;
  20147.                 }
  20148.             }
  20149.         }
  20150.  
  20151.         var dialogWidth = width + this.DetectedDialogWidthDelta;
  20152.         var dialogHeight = height + this.DetectedDialogHeightDelta;
  20153.  
  20154.         var strChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + this.Consts.DetectedDialogFilename;
  20155.         this.DetectDialog = window.openDialog(strChromePath,
  20156.                                                 this.Consts.DetectedDialogName,
  20157.                                                 'chrome,dependent,resizable=no,titlebar=yes,screenX=' + dialogScreenX + ',screenY=' + dialogScreenY + ',width=' + dialogWidth + ',height=' + 1,
  20158.                                                 strUrls, width, height);
  20159.     },
  20160.  
  20161.     GetDialog: function() {
  20162.         var strOptionsDialogType = this.Consts.DialogType;
  20163.         var strOptionsDialogName = this.Consts.DialogName;
  20164.  
  20165.         var oOptionsDialog = EBGlobalManager_CT2384137.GetXULWindowByTypeAndName(strOptionsDialogType, strOptionsDialogName);
  20166.  
  20167.         return oOptionsDialog;
  20168.     },
  20169.     // +++++++ Detected Dialog start +++++++++++++++++++++++++++++++
  20170.     OnExternalClick: function(event) {
  20171.         if (EBMCDialog_CT2384137.DetectDialog) {
  20172.             EBMCDialog_CT2384137.DetectDialog.close();
  20173.  
  20174.  
  20175.             window.removeEventListener("click",
  20176.                                     EBMCDialog_CT2384137.OnExternalClick,
  20177.                                     false);
  20178.         }
  20179.     },
  20180.  
  20181.     Detected_OnLoad: function(event) {
  20182.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20183.         document.getElementById('descriptionOnError').style.display = 'none';
  20184.  
  20185.         //translate
  20186.         EBMCLanguagePack_CT2384137.Detected_OnLoad(objWindow);
  20187.  
  20188.         var strTooltipUrl = (objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipUrl)) ? objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipUrl) : this.DetectedUrl;
  20189.         this.DetectedArrUrls = strURLs.split(' ');
  20190.         this.DetectedSelectedIndex = 0;
  20191.  
  20192.         if (this.DetectedArrUrls.length > 1)
  20193.             this.Detected_ShowArrows(event);
  20194.         else {
  20195.             this._DisableNextButton();
  20196.             this._DisablePrevButton();
  20197.         }
  20198.         var strUrl = strTooltipUrl.replace(/@EB_INSTALL_LINK@/, this.DetectedArrUrls[0]);
  20199.         var browserId = this.Consts.BrowserID;
  20200.  
  20201.         //create and add browser
  20202.         this.xulBrowser = EBXULFactory_CT2384137.CreateBrowser(browserId, strUrl, browserWidth, browserHeight);
  20203.         var mainBox = document.getElementById('mainBrowserBox');
  20204.         mainBox.appendChild(this.xulBrowser);
  20205.  
  20206.         //init progress listener and observers
  20207.         this._setListeners();
  20208.  
  20209.         this._UpdateImagePositions();
  20210.         this.SlideWindow(2);
  20211.     },
  20212.  
  20213.     _setListeners: function() {
  20214.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20215.         this._gadgetProgressListener = new EBGadgetProgressListener_CT2384137();
  20216.         this._gadgetProgressListener.init(this.xulBrowser,
  20217.                                             true,
  20218.                                             browserWidth,
  20219.                                             browserHeight,
  20220.                                             oWindow.oToolbarManager_CT2384137.getToolbarData().componentsIds.MultiCommunity,
  20221.                                             oWindow.oToolbarManager_CT2384137.getToolbarData().componentsIds.MultiCommunity);
  20222.  
  20223.         this._gadgetProgressListener.initGadgetData("", "", EBMCDialog_CT2384137.Detected_OnDocumentComplete, null, this);
  20224.     },
  20225.  
  20226.     SlideWindow: function(height) {
  20227.         var iHeight = parseInt(height);
  20228.         var newHeight = iHeight + 10;
  20229.         if (iHeight >= browserHeight + EBMCDialog_CT2384137.DetectedDialogHeightDelta) {
  20230.             window.resizeTo(browserWidth + EBMCDialog_CT2384137.DetectedDialogWidthDelta, browserHeight + EBMCDialog_CT2384137.DetectedDialogHeightDelta);
  20231.         }
  20232.         else {
  20233.             window.resizeTo(browserWidth + EBMCDialog_CT2384137.DetectedDialogWidthDelta, iHeight);
  20234.             setTimeout(function() { EBMCDialog_CT2384137.SlideWindow(newHeight); }, 25);
  20235.         }
  20236.     },
  20237.  
  20238.     Detected_OnUnLoad: function(event) {
  20239.         var isChecked = document.getElementById('chkDontShowAgain').checked;
  20240.  
  20241.         //unload browser manager
  20242.         if (this._gadgetProgressListener)
  20243.             this._gadgetProgressListener.unload();
  20244.  
  20245.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipShow, !isChecked);
  20246.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20247.         objWindow.EBMCButtonManager_CT2384137.IsTooltipShown = false;
  20248.  
  20249.         //firefox bug is when you close one xul window, the others are moved
  20250.         //to back in z-order, so we focus() on the last focused PopHtmlWindow
  20251.         //and it gets all such window to front. (only on window platform)
  20252.         if (EBGlobalManager_CT2384137.IsWindowsPlatform())
  20253.             objWindow.setTimeout(function() { objWindow.EBGadgetManager_CT2384137.BringToFront(); }, 1);
  20254.  
  20255.         objWindow.EBMCDialog_CT2384137.DetectDialog = null;
  20256.     },
  20257.  
  20258.     Detected_OnBlur: function(event) {
  20259.  
  20260.     },
  20261.  
  20262.     Detected_OnLearnMoreClick: function() {
  20263.         var strUrl = EBMCDialog_CT2384137.DetectedArrUrls[EBMCDialog_CT2384137.DetectedSelectedIndex];
  20264.         EBActionManager_CT2384137.OpenLearnMore("TAB", strUrl);
  20265.     },
  20266.  
  20267.     Detected_OnClick: function(event) {
  20268.         if (this.WindowCloseTimeout)
  20269.             clearTimeout(this.WindowCloseTimeout);
  20270.     },
  20271.  
  20272.     Detected_OnDocumentComplete: function(bIsSuccess) {
  20273.         if (!bIsSuccess)
  20274.             this.Detected_OnErrorDocument();
  20275.     },
  20276.  
  20277.     Detected_OnErrorDocument: function() {
  20278.         var imgAddTo = document.getElementById('imgAddTo');
  20279.         var oDescriptionOnError = document.getElementById('descriptionOnError');
  20280.  
  20281.         this.xulBrowser.style.display = 'none';
  20282.         oDescriptionOnError.style.display = '';
  20283.         var descHeight = browserHeight - 8;
  20284.         var descWidth = browserWidth;
  20285.         oDescriptionOnError.width = descWidth;
  20286.         oDescriptionOnError.height = descHeight;
  20287.         this._DisableAddTo(imgAddTo);
  20288.     },
  20289.  
  20290.     Detected_ShowArrows: function() {
  20291.         this._DisablePrevButton();
  20292.     },
  20293.  
  20294.     _UpdateImagePositions: function() {
  20295.         var imgPrev = document.getElementById('imgPrev');
  20296.         var imgNext = document.getElementById('imgNext');
  20297.         var imgClose = document.getElementById('imgClose');
  20298.         var imgAddTo = document.getElementById('imgAddTo');
  20299.         imgPrev.setAttribute('left', parseInt(browserWidth) / 2 - 21)
  20300.         imgNext.setAttribute('left', parseInt(browserWidth) / 2 + 11)
  20301.         imgClose.setAttribute('left', parseInt(browserWidth) - 14)
  20302.         imgAddTo.setAttribute('left', parseInt(browserWidth) - 100)
  20303.     },
  20304.  
  20305.     _DisableAddTo: function(objImage) {
  20306.         objImage.src = 'chrome://iobitcom/skin/mc_tooltip_addTo_over.gif';
  20307.         objImage.onmouseover = null;
  20308.         objImage.onmouseout = null;
  20309.         objImage.onmouseup = null;
  20310.         objImage.onmousedown = null;
  20311.         objImage.setAttribute('onclick', '');
  20312.         objImage.onclick = null;
  20313.     },
  20314.  
  20315.     _DisableNextButton: function() {
  20316.         var objImage = document.getElementById('imgNext');
  20317.         objImage.src = 'chrome://iobitcom/skin/mc_tooltip_next_dis.gif';
  20318.         objImage.onmouseover = null;
  20319.         objImage.onmouseout = null;
  20320.         objImage.onmouseup = null;
  20321.         objImage.onmousedown = null;
  20322.         objImage.setAttribute('onclick', '');
  20323.         objImage.onclick = null;
  20324.     },
  20325.  
  20326.     _EnableNextButton: function() {
  20327.         var objImage = document.getElementById('imgNext');
  20328.         objImage.src = 'chrome://iobitcom/skin/mc_tooltip_next.gif';
  20329.         objImage.setAttribute('onclick', 'EBMCDialog_CT2384137.Detected_OnNextClick(event);');
  20330.         objImage.onmousedown = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_next_dn.gif'; };
  20331.         objImage.onmouseup = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_next.gif'; };
  20332.         objImage.onmouseover = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_next_over.gif'; };
  20333.         objImage.onmouseout = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_next.gif'; };
  20334.     },
  20335.  
  20336.     _DisablePrevButton: function() {
  20337.         var objImage = document.getElementById('imgPrev');
  20338.         objImage.src = 'chrome://iobitcom/skin/mc_tooltip_prev_dis.gif';
  20339.         objImage.onmouseover = null;
  20340.         objImage.onmouseout = null;
  20341.         objImage.onmouseup = null;
  20342.         objImage.onmousedown = null;
  20343.         objImage.setAttribute('onclick', '');
  20344.         objImage.onclick = null;
  20345.     },
  20346.  
  20347.     _EnablePrevButton: function() {
  20348.         var objImage = document.getElementById('imgPrev');
  20349.         objImage.src = 'chrome://iobitcom/skin/mc_tooltip_prev.gif';
  20350.         objImage.setAttribute('onclick', 'EBMCDialog_CT2384137.Detected_OnPrevClick(event);');
  20351.         objImage.onmousedown = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_prev_dn.gif'; };
  20352.         objImage.onmouseup = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_prev.gif'; };
  20353.         objImage.onmouseover = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_prev_over.gif'; };
  20354.         objImage.onmouseout = function() { this.src = 'chrome://iobitcom/skin/mc_tooltip_prev.gif'; };
  20355.     },
  20356.  
  20357.     Detected_OnPrevClick: function(event) {
  20358.         this.CheckIfBrowserVisible();
  20359.         //disable window close on user action;
  20360.         if (EBMCDialog_CT2384137.WindowCloseTimeout)
  20361.             clearTimeout(EBMCDialog_CT2384137.WindowCloseTimeout);
  20362.  
  20363.         var oPrev = event.target;
  20364.         var oNext = document.getElementById('imgNext');
  20365.  
  20366.         //if next button is disabled, enable it
  20367.         if (EBMCDialog_CT2384137.DetectedSelectedIndex == EBMCDialog_CT2384137.DetectedArrUrls.length - 1) {
  20368.             EBMCDialog_CT2384137._EnableNextButton();
  20369.         }
  20370.  
  20371.         EBMCDialog_CT2384137.DetectedSelectedIndex--;
  20372.  
  20373.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20374.         var strTooltipUrl = (objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipUrl)) ? objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipUrl) : this.DetectedUrl;
  20375.         var strUrl = strTooltipUrl.replace(/@EB_INSTALL_LINK@/, EBMCDialog_CT2384137.DetectedArrUrls[EBMCDialog_CT2384137.DetectedSelectedIndex]);
  20376.         EBMCDialog_CT2384137.xulBrowser.setAttribute('src', strUrl);
  20377.  
  20378.         if (EBMCDialog_CT2384137.DetectedSelectedIndex == 0) {
  20379.             EBMCDialog_CT2384137._DisablePrevButton();
  20380.         }
  20381.     },
  20382.  
  20383.     Detected_OnNextClick: function(event) {
  20384.         this.CheckIfBrowserVisible();
  20385.         //disable window close on user action;
  20386.         if (EBMCDialog_CT2384137.WindowCloseTimeout)
  20387.             clearTimeout(EBMCDialog_CT2384137.WindowCloseTimeout);
  20388.  
  20389.         var oNext = event.target;
  20390.         var oPrev = document.getElementById('imgPrev');
  20391.  
  20392.         //if prev button is disabled, enable it
  20393.         if (EBMCDialog_CT2384137.DetectedSelectedIndex == 0) {
  20394.             EBMCDialog_CT2384137._EnablePrevButton();
  20395.         }
  20396.  
  20397.         EBMCDialog_CT2384137.DetectedSelectedIndex++;
  20398.  
  20399.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20400.         var strTooltipUrl = (objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipUrl)) ? objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipUrl) : this.DetectedUrl;
  20401.         var strUrl = strTooltipUrl.replace(/@EB_INSTALL_LINK@/, EBMCDialog_CT2384137.DetectedArrUrls[EBMCDialog_CT2384137.DetectedSelectedIndex]);
  20402.         EBMCDialog_CT2384137.xulBrowser.setAttribute('src', strUrl);
  20403.  
  20404.         if (EBMCDialog_CT2384137.DetectedSelectedIndex == EBMCDialog_CT2384137.DetectedArrUrls.length - 1) {
  20405.             EBMCDialog_CT2384137._DisableNextButton();
  20406.         }
  20407.     },
  20408.  
  20409.     CheckIfBrowserVisible: function() {
  20410.         var oDescriptionOnError = document.getElementById('descriptionOnError');
  20411.         if (this.xulBrowser.style.display == 'none') {
  20412.             this.xulBrowser.style.display = '';
  20413.             oDescriptionOnError.style.display = 'none'
  20414.         }
  20415.     },
  20416.  
  20417.     Detected_AddToOnClick: function(event) {
  20418.         window.close();
  20419.         var strUrl = EBMCDialog_CT2384137.DetectedArrUrls[EBMCDialog_CT2384137.DetectedSelectedIndex];
  20420.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20421.         if (objWindow.EBMCManager_CT2384137.IsCommunityExists(strUrl)) {
  20422.             //switch only
  20423.             var oCommunity = objWindow.EBMCManager_CT2384137.GetCommunityFromExistingCommunitiesByInstallUrl(strUrl);
  20424.  
  20425.             var oTimeout = function() {
  20426.                 objWindow.EBMCManager_CT2384137.ChangeToCommunity(oCommunity.CTID, oCommunity.Name, true, null, objWindow.EBUsageMyConduit_CT2384137.SourceTooltip, false);
  20427.             };
  20428.             objWindow.setTimeout(oTimeout, 100);
  20429.         }
  20430.         else {
  20431.             //add community and switch
  20432.             objWindow.EBMCTrusteDialog_CT2384137.open(strUrl, EBUsageMyConduit_CT2384137.SourceTooltip);
  20433.         }
  20434.     },
  20435.  
  20436.     // +++++++ Detected Dialog end +++++++++++++++++++++++++++++++
  20437.  
  20438.     // +++++++ Download Dialog start +++++++++++++++++++++++++++++++
  20439.     Download_OnLoad: function() {
  20440.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20441.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  20442.         if (dialogsDirection)
  20443.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "ebMulticommunityDownloadDialog");
  20444.  
  20445.         var iMode = 0;
  20446.         var strCommunityName = '';
  20447.         var lnkLearnMore = document.getElementById('lnkLearnMore');
  20448.  
  20449.         //There are 3 modes to the dialog
  20450.         //Regular(0) : Add to, Install
  20451.         //(1)        : Switch to, Reinstall
  20452.         //(2)        : Switch to, Install
  20453.         if (objWindow.EBMCManager_CT2384137.IsCommunityExists(strURL)) {
  20454.             if (objWindow.EBMCManager_CT2384137.IsDownloadUrlIsOriginalCommunity(strURL)) {
  20455.                 iMode = 1;
  20456.                 strCommunityName = " " + objWindow.EBActionManager_CT2384137.GetToolbarName();
  20457.             }
  20458.             else {
  20459.                 iMode = 2;
  20460.                 strCommunityName = " " + objWindow.EBMCManager_CT2384137.GetCommunityNameFromInstallationUrl(strURL);
  20461.             }
  20462.  
  20463.             lnkLearnMore.style.display = 'none';
  20464.         }
  20465.         else
  20466.             lnkLearnMore.style.display = '';
  20467.  
  20468.         EBMCLanguagePack_CT2384137.DownloadDialog_OnLoad(objWindow, iMode, strCommunityName);
  20469.     },
  20470.  
  20471.     Download_OnDialogAccept: function() {
  20472.         var oRadio = document.getElementById("radio_add");
  20473.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20474.         if (oRadio.selected) {
  20475.             if (objWindow.EBMCManager_CT2384137.IsCommunityExists(strURL)) {
  20476.                 var oCommunity = objWindow.EBMCManager_CT2384137.GetCommunityFromExistingCommunitiesByInstallUrl(strURL);
  20477.  
  20478.                 var oTimeout = function() {
  20479.                     objWindow.EBMCManager_CT2384137.ChangeToCommunity(oCommunity.CTID, oCommunity.Name, false, null, objWindow.EBUsageMyConduit_CT2384137.SourceMessageBox, false);
  20480.                 };
  20481.                 objWindow.setTimeout(oTimeout, 100);
  20482.             }
  20483.             else
  20484.                 objWindow.EBMCTrusteDialog_CT2384137.open(strURL, EBUsageMyConduit_CT2384137.SourceMessageBox);
  20485.  
  20486.             objWindow.EBMCManager_CT2384137.NavigationStop();
  20487.         }
  20488.  
  20489.         objWindow.setTimeout(function() { objWindow.ToolbarDetected = false; }, 500);
  20490.     },
  20491.  
  20492.     Download_OnDialogCancel: function() {
  20493.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20494.         objWindow.EBMCManager_CT2384137.NavigationStop();
  20495.     },
  20496.  
  20497.     Download_OnLearnMoreClick: function() {
  20498.         EBActionManager_CT2384137.OpenLearnMore("BLANK", strURL);
  20499.     },
  20500.  
  20501.     // +++++++ Download Dialog end +++++++++++++++++++++++++++++++++
  20502.  
  20503.  
  20504.     // +++++++ Manage toolbars dialog ++++++++++++++++++++++++++++++
  20505.  
  20506.     StatusHash: null,
  20507.     ShowHideTexts: '',
  20508.  
  20509.     OnLoad: function() {
  20510.         this.StatusHash = new EBArrayHashObject_CT2384137();
  20511.  
  20512.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20513.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  20514.         if (dialogsDirection)
  20515.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "ebMulticommunityDialog");
  20516.  
  20517.         //this.oDownBtn        = document.getElementById("btnMoveDown");
  20518.         //this.oUpBtn        = document.getElementById("btnMoveUp");
  20519.         this.oDeleteBtn = document.getElementById("btnDelete");
  20520.         this.oHideBtn = document.getElementById("btnHide");
  20521.         this.oAcceptBtn = document.getElementById("ebMulticommunityDialog").getButton("accept");
  20522.         this.oCancelBtn = document.getElementById("ebMulticommunityDialog").getButton("cancel");
  20523.         this.oListBox = document.getElementById("listCommunities");
  20524.         this.oDescription = document.getElementById("dscTitle");
  20525.  
  20526.         this.ShowHideTexts = EBMCLanguagePack_CT2384137.Dialog_OnLoad(objWindow, this);
  20527.  
  20528.         var objCommunities = objWindow.EBMCManager_CT2384137.AllCommunities;
  20529.         objCommunities.InitForDialog();
  20530.  
  20531.         var max = 0;
  20532.         var listItem = null;
  20533.         var oCommunity = null;
  20534.  
  20535.         if (objCommunities.GroupingDialog && !objCommunities.GroupingDialog.IsEmpty()) {
  20536.             max = this.CreateListItems(objCommunities.GroupingDialog, true, max);
  20537.         }
  20538.  
  20539.         if (objCommunities.UserDialog && !objCommunities.UserDialog.IsEmpty()) {
  20540.             max = this.CreateListItems(objCommunities.UserDialog, false, max);
  20541.         }
  20542.  
  20543.         //resize the listbox according to the biggest item.
  20544.         if (max != 0) {
  20545.             max += 40;
  20546.             strSize = max + 'px';
  20547.             this.oListBox.width = strSize;
  20548.         }
  20549.     },
  20550.  
  20551.     CreateListItems: function(oCommunities, bIsGrouping, iMax) {
  20552.         var strSize = '';
  20553.         var iSize = 0;
  20554.         var max = iMax;
  20555.  
  20556.         for (var i = 0; i < oCommunities.Count(); i++) {
  20557.             oCommunity = oCommunities.GetByIndex(i);
  20558.             listItem = oCommunity.toListItem(bIsGrouping, document);
  20559.             this.oListBox.appendChild(listItem);
  20560.  
  20561.             strSize = document.defaultView.getComputedStyle(listItem, null).getPropertyValue("width");
  20562.             strSize = strSize.replace(/px/, "");
  20563.             iSize = parseInt(strSize);
  20564.  
  20565.             if (!isNaN(iSize) && iSize > max) {
  20566.                 max = iSize;
  20567.             }
  20568.         }
  20569.  
  20570.         return max;
  20571.     },
  20572.  
  20573.     // ---- List Items Functions -------------------------------------------
  20574.  
  20575.     //check / uncheck
  20576.     ListItem_OnClickCheckBox: function(e) {
  20577.         var obj = e.target;
  20578.         var bIsChecked = EBGlobalManager_CT2384137.GetBooleanAttribute(obj, 'checked', false);
  20579.         bIsChecked = !bIsChecked;
  20580.         var strCTID = obj.parentNode.getAttribute('id');
  20581.         this.CheckUncheckItem(obj, strCTID, bIsChecked);
  20582.         this.DialogChanged();
  20583.     },
  20584.  
  20585.     ListItem_MouseOver: function(obj) {
  20586.         obj.setAttribute('image', this.Consts.DialogIcon_over)
  20587.     },
  20588.  
  20589.     ListItem_MouseOut: function(obj) {
  20590.         obj.setAttribute('image', this.Consts.DialogIcon)
  20591.     },
  20592.  
  20593.     ListCommunities_OnSelect: function(event) {
  20594.         this.oDeleteBtn.disabled = false;
  20595.         this.oHideBtn.disabled = false;
  20596.  
  20597.         var oSelected = this.oListBox.selectedItem;
  20598.  
  20599.         var bIsChecked = EBGlobalManager_CT2384137.GetBooleanAttribute(oSelected.firstChild, 'checked', false);
  20600.  
  20601.         if (bIsChecked) {
  20602.             this.oHideBtn.setAttribute('label', this.ShowHideTexts.hide);
  20603.         }
  20604.         else {
  20605.             this.oHideBtn.setAttribute('label', this.ShowHideTexts.show);
  20606.         }
  20607.  
  20608.  
  20609.         //        if(iSelectedIndex == 0)
  20610.         //        {
  20611.         //            this.DisableUpBtn();
  20612.         //        }
  20613.         //        else
  20614.         //        {
  20615.         //            this.EnableUpBtn();
  20616.         //        }
  20617.         //        if(iSelectedIndex == this.oListBox.childNodes.length - 2)
  20618.         //        {
  20619.         //            this.DisableDownBtn()
  20620.         //        }
  20621.         //        else
  20622.         //        {
  20623.         //            this.EnableDownBtn();
  20624.         //        }
  20625.  
  20626.     },
  20627.  
  20628.     //    DisableUpBtn : function()
  20629.     //    {
  20630.     //        this.oUpBtn.disabled = true;
  20631.     //    },
  20632.     //    
  20633.     //    DisableDownBtn : function()
  20634.     //    {
  20635.     //        this.oDownBtn.disabled = true;
  20636.     //    },
  20637.     //    
  20638.     //    EnableUpBtn : function()
  20639.     //    {
  20640.     //        this.oUpBtn.disabled = false;
  20641.     //    },
  20642.     //    
  20643.     //    EnableDownBtn : function()
  20644.     //    {
  20645.     //        this.oDownBtn.disabled = false;
  20646.     //    },
  20647.  
  20648.     //-------------------------------
  20649.  
  20650.     DialogChanged: function() {
  20651.         if (!this.dialogChanged) {
  20652.             this.dialogChanged = true;
  20653.             this.oAcceptBtn.disabled = false;
  20654.         }
  20655.     },
  20656.  
  20657.     CheckUncheckItem: function(obj, strCTID, bIsChecked) {
  20658.         obj.setAttribute('checked', bIsChecked);
  20659.         var objStatus = this.StatusHash.GetByID(strCTID);
  20660.         //update
  20661.         if (objStatus) {
  20662.             objStatus.Status = (bIsChecked) ? 0 : 1;
  20663.         }
  20664.         //add new
  20665.         else {
  20666.             objStatus = new Object();
  20667.             objStatus.Status = (bIsChecked) ? 0 : 1;
  20668.             this.StatusHash.Add(strCTID, objStatus);
  20669.         }
  20670.  
  20671.         if (bIsChecked) {
  20672.             EBMCDialog_CT2384137.oHideBtn.setAttribute('label', this.ShowHideTexts.hide);
  20673.         }
  20674.         else {
  20675.             EBMCDialog_CT2384137.oHideBtn.setAttribute('label', this.ShowHideTexts.show);
  20676.         }
  20677.  
  20678.         this.DialogChanged();
  20679.     },
  20680.  
  20681.     OnHideButtonClicked: function() {
  20682.         var oSelected = this.oListBox.selectedItem;
  20683.         var bIsChecked = EBGlobalManager_CT2384137.GetBooleanAttribute(oSelected.firstChild, 'checked', false);
  20684.  
  20685.         bIsChecked = !bIsChecked;
  20686.         this.CheckUncheckItem(oSelected.firstChild, oSelected.getAttribute('id'), bIsChecked);
  20687.  
  20688.         this.DialogChanged();
  20689.     },
  20690.  
  20691.     OnDeleteButtonClicked: function() {
  20692.         var strName = "";
  20693.         var oSelectedItem = this.oListBox.selectedItem;
  20694.         try {
  20695.             strName = oSelectedItem.childNodes[1].getAttribute("label");
  20696.         }
  20697.         catch (ex) { }
  20698.  
  20699.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20700.         var locale = oWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  20701.         var strTitle = oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_MULTI_COMMUNITY_DELETE_WARNING_DLG_CAPTION", locale);
  20702.         var strText = oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_MULTI_COMMUNITY_DELETE_WARNING_DLG_TEXT", locale);
  20703.         strText = strText.replace(/\[TOOLBAR NAME\]/, strName);
  20704.         if (!EBGlobalManager_CT2384137.Confirm(window, strTitle, strText)) return;
  20705.  
  20706.         var iSelectedIndex = this.oListBox.selectedIndex;
  20707.         var strCTID = oSelectedItem.getAttribute('id');
  20708.         var objStatus = new Object();
  20709.         objStatus.Status = 2;
  20710.  
  20711.         this.StatusHash.Add(strCTID, objStatus);
  20712.  
  20713.         this.oListBox.removeItemAt(iSelectedIndex);
  20714.  
  20715.         if (iSelectedIndex == this.oListBox.childNodes.length - 1) {
  20716.             iSelectedIndex--;
  20717.         }
  20718.  
  20719.         if (iSelectedIndex != -1) {
  20720.             var oItem = this.oListBox.getItemAtIndex(iSelectedIndex);
  20721.             if (oItem) {
  20722.                 this.oListBox.selectItem(oItem);
  20723.             }
  20724.         }
  20725.  
  20726.         this.DialogChanged();
  20727.     },
  20728.  
  20729.  
  20730.     //    OnMoveUpButtonClicked : function()
  20731.     //    {
  20732.     //        var oSelectedItem = this.oListBox.selectedItem;
  20733.     //        var oUpper = this.oListBox.childNodes[this.oListBox.selectedIndex];
  20734.     //        this.oListBox.insertBefore(oSelectedItem,oUpper);
  20735.     //        this.AfterMoveProcedures(oSelectedItem);
  20736.     //    },
  20737.     //    
  20738.     //    OnMoveDownButtonClicked : function()
  20739.     //    {
  20740.     //        var oSelectedItem = this.oListBox.selectedItem;
  20741.     //        var oLower = this.oListBox.childNodes[this.oListBox.selectedIndex+2];
  20742.     //        this.oListBox.insertBefore(oLower,oSelectedItem);
  20743.     //        this.AfterMoveProcedures(oSelectedItem);
  20744.     //    },
  20745.     //    
  20746.     //    AfterMoveProcedures : function(oSelectedItem)
  20747.     //    {
  20748.     //        this.oListBox.selectItem(oSelectedItem);
  20749.     //        this.oListBox.ensureElementIsVisible(oSelectedItem);
  20750.     //        this.ListCommunities_OnSelect();
  20751.     //        this.DialogChanged();
  20752.     //    },
  20753.  
  20754.  
  20755.     // ---- List Items Functions End -------------------------------------------
  20756.  
  20757.  
  20758.     UpdateGroupingChanges: function() {
  20759.         if (this.DeletedGroupingArray.length > 0) {
  20760.             for (var i = 0; i < this.DeletedGroupingArray.length; i++) {
  20761.                 EBMCIO_CT2384137.SetGroupingDeleted(this.DeletedGroupingArray[i]);
  20762.             }
  20763.         }
  20764.     },
  20765.  
  20766.     //Returns object with changes
  20767.     SyncCommunitiesStatus: function(oCommunities, bIsDelete, oReturn) {
  20768.         var oCommunity = null;
  20769.         var objStatus = null;
  20770.  
  20771.         for (var strCTID in this.StatusHash.HashArray) {
  20772.             objStatus = this.StatusHash.GetByID(strCTID);
  20773.             if (objStatus) {
  20774.                 oCommunity = oCommunities.GetByID(strCTID);
  20775.                 if (oCommunity) {
  20776.                     oCommunity.SetStatus(objStatus.Status)
  20777.  
  20778.                     switch (objStatus.Status) {
  20779.                         case 0: if (oReturn) oReturn.ShownCTIDs.push(oCommunity.CTID); break;
  20780.                         case 1: if (oReturn) oReturn.HiddenCTIDs.push(oCommunity.CTID); break;
  20781.                         case 2: if (oReturn) oReturn.DeletedCTIDs.push(oCommunity.CTID);
  20782.                             if (bIsDelete) oCommunities.Remove(oCommunity); break;
  20783.                     }
  20784.                 }
  20785.             }
  20786.         }
  20787.  
  20788.         return oReturn;
  20789.     },
  20790.  
  20791.     OnDialogAccept: function() {
  20792.         var iStatus = 0;
  20793.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20794.         var objCommunities = objWindow.EBMCManager_CT2384137.AllCommunities;
  20795.  
  20796.         var oReturn = new Object();
  20797.         oReturn.HiddenCTIDs = new Array();
  20798.         oReturn.DeletedCTIDs = new Array();
  20799.         oReturn.ShownCTIDs = new Array();
  20800.  
  20801.         if (objCommunities.UserCommunities && !objCommunities.UserCommunities.IsEmpty()) {
  20802.             this.SyncCommunitiesStatus(objCommunities.UserCommunities, true, oReturn);
  20803.             objCommunities.UserCommunities.SaveToFile();
  20804.         }
  20805.  
  20806.         if (objCommunities.GroupingCommunities && !objCommunities.GroupingCommunities.IsEmpty())
  20807.             this.SyncCommunitiesStatus(objCommunities.GroupingCommunities, false, oReturn);
  20808.  
  20809.         if (objCommunities.RecentCommunities && !objCommunities.RecentCommunities.IsEmpty()) {
  20810.             this.SyncCommunitiesStatus(objCommunities.RecentCommunities, true, null);
  20811.             objCommunities.RecentCommunities.SaveToFile();
  20812.         }
  20813.  
  20814.         objCommunities.Init();
  20815.  
  20816.         EBMCManager_CT2384137.BroadcastChanges(objCommunities);
  20817.  
  20818.         objWindow.EBUsageMyConduit_CT2384137.OpenEditdialog(objWindow.EBMCManager_CT2384137.AllCommunities.Count(),
  20819.                                                     objWindow.EBUsageMyConduit_CT2384137.ExitCodeOK,
  20820.                                                     oReturn.DeletedCTIDs,
  20821.                                                     oReturn.HiddenCTIDs,
  20822.                                                     oReturn.ShownCTIDs);
  20823.     },
  20824.  
  20825.     OnDialogCancel: function() {
  20826.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  20827.         objWindow.EBUsageMyConduit_CT2384137.OpenEditdialog(objWindow.EBMCManager_CT2384137.AllCommunities.Count(),
  20828.                                                     objWindow.EBUsageMyConduit_CT2384137.ExitCodeCancel,
  20829.                                                     null,
  20830.                                                     null,
  20831.                                                     null);
  20832.     }
  20833. }
  20834. var EBMCIO_CT2384137 =
  20835. {
  20836.     InitGrouping: function(bIsEmpty) {
  20837.         EBMCServerComm_CT2384137.InitGrouping(bIsEmpty);
  20838.     },
  20839.  
  20840.     AddCommunityToFile: function(objCommunity) {
  20841.         //add to user file
  20842.         var oCommunities = this.LoadCommunities('user');
  20843.         oCommunities.AddFirst(objCommunity);
  20844.         oCommunities.SaveToFile();
  20845.  
  20846.         //add also to recent
  20847.         oCommunities = this.LoadCommunities('recent');
  20848.         oCommunities.Add(objCommunity);
  20849.         oCommunities.SaveToFile();
  20850.     },
  20851.  
  20852.     LoadCommunities: function(strWhich) {
  20853.         var strFullPath = EBMCConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep;
  20854.  
  20855.         if (strWhich == EBMCConsts_CT2384137.CommunityFileType.User)
  20856.             strFullPath += EBMCConsts_CT2384137.CommunitiesFileName;
  20857.         else if (strWhich == EBMCConsts_CT2384137.CommunityFileType.Grouping)
  20858.             strFullPath += EBMCConsts_CT2384137.GroupFileName;
  20859.         else if (strWhich == EBMCConsts_CT2384137.CommunityFileType.Recent)
  20860.             strFullPath += EBMCConsts_CT2384137.RecentFileName
  20861.  
  20862.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(strFullPath);
  20863.         var strXMLFile = EBFileIO_CT2384137.read(oFile, EBGlobalConsts_CT2384137.DefaultCharset);
  20864.  
  20865.         var xmlCommunities = null;
  20866.         var objCommunities = null;
  20867.  
  20868.         if (strXMLFile) {
  20869.             xmlCommunities = EBXML_CT2384137.GetXmlDocument(strXMLFile);
  20870.             xmlCommunities = xmlCommunities.documentElement;
  20871.         }
  20872.  
  20873.         if (strWhich == EBMCConsts_CT2384137.CommunityFileType.Recent)
  20874.             objCommunities = new EBRecentCommunityList_CT2384137(xmlCommunities, strFullPath);
  20875.         else
  20876.             objCommunities = new EBMCCommunityList_CT2384137(xmlCommunities, strFullPath);
  20877.  
  20878.         return objCommunities;
  20879.     },
  20880.  
  20881.     RemoveDeletedGroupingCommunities: function(xmlCommunities) {
  20882.         var strCTID = '';
  20883.         var strPrefName = '';
  20884.         var bIsDeleted = false;
  20885.         for (var i = xmlCommunities.childNodes.length - 1; i >= 0; i--) {
  20886.             strCTID = this.GetCTIDFromCommunityXML(xmlCommunities.childNodes[i]);
  20887.             strPrefName = EBMCConsts_CT2384137.DeletedGroupingBranch + '.' + strCTID;
  20888.             bIsDeleted = EBToolbarPreferenceManager_CT2384137.GetPref(strPrefName);
  20889.             if (bIsDeleted) {
  20890.                 xmlCommunities.removeChild(xmlCommunities.childNodes[i]);
  20891.             }
  20892.         }
  20893.     },
  20894.  
  20895.     ChangeToCommunity: function(strUrl, strSource) {
  20896.         EBMCServerComm_CT2384137.GetCommunityInfoFromServer(strUrl, strSource);
  20897.     },
  20898.  
  20899.     GetNodeByCTID: function(xmlDoc, ctid) {
  20900.         var currCTID = "";
  20901.         var xmlCommunity = null;
  20902.         var xmlNode = null;
  20903.  
  20904.         for (var i = 0; i < xmlDoc.childNodes.length; i++) {
  20905.             xmlCommunity = xmlDoc.childNodes[i];
  20906.             for (var j = 0; xmlCommunity.childNodes.length; j++) {
  20907.                 xmlNode = xmlCommunity.childNodes[j];
  20908.                 if (xmlNode.tagName == EBMCConsts_CT2384137.xmlTags.CTID) {
  20909.                     currCTID = EBXML_CT2384137.GetXmlNodeValue(xmlNode);
  20910.                     if (currCTID == ctid) {
  20911.                         return xmlCommunity;
  20912.                     }
  20913.                     else {
  20914.                         break;
  20915.                     }
  20916.                 }
  20917.             }
  20918.         }
  20919.         return null;
  20920.     },
  20921.  
  20922.     GetValueFromCommunityXmlByTagName: function(xmlDoc, tagName) {
  20923.         for (var i = 0; i < xmlDoc.childNodes.length; i++) {
  20924.             if (xmlDoc.childNodes[i].tagName == tagName) {
  20925.                 return EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  20926.             }
  20927.         }
  20928.     },
  20929.  
  20930.     GetCTIDFromCommunityXML: function(xmlDoc) {
  20931.         return this.GetValueFromCommunityXmlByTagName(xmlDoc, EBMCConsts_CT2384137.xmlTags.CTID);
  20932.     },
  20933.  
  20934.     GetNameFromCommunityXML: function(xmlDoc) {
  20935.         return this.GetValueFromCommunityXmlByTagName(xmlDoc, EBMCConsts_CT2384137.xmlTags.Name);
  20936.     },
  20937.  
  20938.     GetInstallUrlFromCommunityXML: function(xmlDoc) {
  20939.         return this.GetValueFromCommunityXmlByTagName(xmlDoc, EBMCConsts_CT2384137.xmlTags.InstallUrl);
  20940.     },
  20941.  
  20942.     GetObjectFromCommunityXML: function(xmlDoc) {
  20943.         var obj = new Object();
  20944.         obj.ctid = "";
  20945.         obj.name = "";
  20946.         obj.InstallUrl = "";
  20947.         obj.description = "";
  20948.         obj.tags = "";
  20949.  
  20950.         for (var i = 0; i < xmlDoc.childNodes.length; i++) {
  20951.             if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.CTID)
  20952.                 obj.ctid = EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  20953.             else if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.Name)
  20954.                 obj.name = EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  20955.             else if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.InstallUrl)
  20956.                 obj.installUrl = EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  20957.             else if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.Tags)
  20958.                 obj.tags = EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  20959.             else if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.Description)
  20960.                 obj.description = EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  20961.         }
  20962.         return obj;
  20963.     },
  20964.  
  20965.     SetGroupingDeleted: function(strCTID) {
  20966.         var strPrefName = EBMCConsts_CT2384137.DeletedGroupingBranch + '.' + strCTID;
  20967.         EBToolbarPreferenceManager_CT2384137.SetPref(strPrefName, true);
  20968.     },
  20969.  
  20970.     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  20971.     //get grouping functions for current toolbar
  20972.  
  20973.     InitCurrentGrouping: function() {
  20974.         EBMCServerComm_CT2384137.InitCurrentGrouping();
  20975.     },
  20976.  
  20977.     SaveDomainsToFile: function(xmlDomains, strFileName) {
  20978.         var strXml = EBXML_CT2384137.GetStringXml(xmlDomains);
  20979.         var strFile = EBMCConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + strFileName;
  20980.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(strFile);
  20981.         EBFileIO_CT2384137.write(oFile, strXml, '', EBGlobalConsts_CT2384137.DefaultCharset);
  20982.     },
  20983.  
  20984.     SaveDownloadDomainsToFile: function(xmlDownloadDomains) {
  20985.         this.SaveDomainsToFile(xmlDownloadDomains, EBMCConsts_CT2384137.DownloadDomainsFileName);
  20986.     },
  20987.  
  20988.     SaveExcludedDomainsToFile: function(xmlExludedDomains) {
  20989.         this.SaveDomainsToFile(xmlExludedDomains, EBMCConsts_CT2384137.ExcludedDomainsFileName);
  20990.     },
  20991.  
  20992.     LoadDomainsFromFile: function(strFileName) {
  20993.         var strFile = EBMCConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + strFileName;
  20994.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(strFile);
  20995.         var strXmlDomains = EBFileIO_CT2384137.read(oFile, EBGlobalConsts_CT2384137.DefaultCharset);
  20996.  
  20997.         var xmlDomains = null;
  20998.         if (strXmlDomains) {
  20999.             xmlDomains = EBXML_CT2384137.GetXmlDocument(strXmlDomains);
  21000.             xmlDomains = xmlDomains.documentElement;
  21001.         }
  21002.         else {
  21003.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.DownloadDomainsListLastCheckTime, '');
  21004.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.DownloadDomainsListLastServerUpdateTime, null);
  21005.         }
  21006.         return xmlDomains;
  21007.     },
  21008.  
  21009.     GetDomainArrayFromXml: function(xmlDomains) {
  21010.         if (!xmlDomains)
  21011.             return null;
  21012.  
  21013.         var xmlNode = null;
  21014.         var strDomain;
  21015.         var arrDownloadDomains = new Array();
  21016.  
  21017.         for (var i = 0; i < xmlDomains.childNodes.length; i++) {
  21018.             xmlNode = xmlDomains.childNodes[i];
  21019.             strDomain = EBXML_CT2384137.GetXmlNodeValue(xmlNode);
  21020.             if (strDomain)
  21021.                 arrDownloadDomains.push(strDomain.toLowerCase());
  21022.         }
  21023.  
  21024.         return arrDownloadDomains;
  21025.     },
  21026.  
  21027.     LoadDownloadDomainsAsArray: function() {
  21028.         var xmlDomains = this.LoadDomainsFromFile(EBMCConsts_CT2384137.DownloadDomainsFileName);
  21029.         return this.GetDomainArrayFromXml(xmlDomains);
  21030.     },
  21031.  
  21032.     LoadExcludedDomainsAsArray: function() {
  21033.         var xmlDomains = this.LoadDomainsFromFile(EBMCConsts_CT2384137.ExcludedDomainsFileName);
  21034.         return this.GetDomainArrayFromXml(xmlDomains);
  21035.     },
  21036.  
  21037.     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  21038.     // Download domains functions END
  21039.  
  21040.     NullifyTimesGrouping: function() {
  21041.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckTime, "0", true);
  21042.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastServerUpdateTime, "0", true);
  21043.     },
  21044.  
  21045.     InvalidateCacheGrouping: function(bInvalidateCache) {
  21046.         var bValue = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingInvalidateCache, true);
  21047.  
  21048.         if (typeof bInvalidateCache != "undefined")
  21049.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingInvalidateCache, bInvalidateCache, true);
  21050.  
  21051.         return bValue;
  21052.     },
  21053.  
  21054.     NullifyTimesCommunitiesChanges: function() {
  21055.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CommunitiesChangesLastCheckTime, "0");
  21056.     }
  21057. }
  21058. var EBMCManager_CT2384137 =
  21059. {
  21060.     UserCommunities: null,
  21061.     GroupingCommunities: null,
  21062.     RecentCommunities: null,
  21063.     AllCommunities: null,
  21064.     arrDetectedDomains: null,
  21065.     IsActive: false,
  21066.     MaxRecent: 10,
  21067.  
  21068.     Exception_CommunityNotExists: 'Exception_CommunityNotExists',
  21069.  
  21070.     Consts:
  21071.     {
  21072.         State: null
  21073.     },
  21074.  
  21075.     OnLoad: function() {
  21076.         this.arrDetectedDomains = new EBArrayHashObject_CT2384137;
  21077.  
  21078.         //initialize detect manager, fill it with known domains
  21079.         if (!EBActionManager_CT2384137.IsToolbarGrouping()
  21080.             ||
  21081.             EBActionManager_CT2384137.IsToolbarMC()) {
  21082.             var arrDownloadDomains = EBMCIO_CT2384137.LoadDownloadDomainsAsArray();
  21083.             var arrExcludedDomains = EBMCIO_CT2384137.LoadExcludedDomainsAsArray();
  21084.  
  21085.             EBMCDetect_CT2384137.Init(arrDownloadDomains, arrExcludedDomains);
  21086.             EBMCServerComm_CT2384137.InitMC();
  21087.         }
  21088.  
  21089.         this.RecentCommunities = EBMCIO_CT2384137.LoadCommunities(EBMCConsts_CT2384137.CommunityFileType.Recent);
  21090.  
  21091.         if (EBActionManager_CT2384137.IsToolbarMC())
  21092.             this.UserCommunities = EBMCIO_CT2384137.LoadCommunities(EBMCConsts_CT2384137.CommunityFileType.User);
  21093.  
  21094.         if (EBActionManager_CT2384137.IsToolbarGrouping()) {
  21095.             this.GroupingCommunities = EBMCIO_CT2384137.LoadCommunities(EBMCConsts_CT2384137.CommunityFileType.Grouping);
  21096.             EBMCIO_CT2384137.InitGrouping(this.GroupingCommunities.IsEmpty());
  21097.         }
  21098.  
  21099.         //get grouping info for currently selected toolbar
  21100.         EBMCIO_CT2384137.InitCurrentGrouping();
  21101.  
  21102.         this.AllCommunities = new EBCommunitiesList_CT2384137(this.UserCommunities,
  21103.                                                                 this.GroupingCommunities,
  21104.                                                                 this.RecentCommunities);
  21105.  
  21106.         EBMCMenu_CT2384137.OnLoad(this.AllCommunities);
  21107.  
  21108.         //star
  21109.         EBMCServerComm_CT2384137.GetCommunitiesChangesInfoFromServer();
  21110.     },
  21111.  
  21112.     GetCount: function() {
  21113.         return this.AllCommunities.Count();
  21114.     },
  21115.  
  21116.     OnClickSearch: function(event, strCompId, strSearchTerm) {
  21117.         var strLink = EBMCConsts_CT2384137.CommunitySearchUrl;
  21118.         if (strSearchTerm)
  21119.             strLink += strSearchTerm;
  21120.  
  21121.         EBLinkManager_CT2384137.LoadLinkURL(event, strLink, "SELF", null, null)
  21122.     },
  21123.  
  21124.     OnClickOpenDialog: function(win) {
  21125.         EBMCDialog_CT2384137.OpenDialog(win);
  21126.     },
  21127.  
  21128.     OnToolbarRefreshGrouping: function(bInvalidateCache) {
  21129.         EBMCIO_CT2384137.NullifyTimesGrouping();
  21130.         EBMCIO_CT2384137.InvalidateCacheGrouping(bInvalidateCache);
  21131.     },
  21132.  
  21133.     ForceRefreshGrouping: function() {
  21134.         this.OnToolbarRefresh(true);
  21135.         EBMCServerComm_CT2384137.GetCurrentGroupInfoFromServer();
  21136.     },
  21137.  
  21138.     OnToolbarRefreshMulticommunitiesChanges: function(bInvalidateCache) {
  21139.         EBMCIO_CT2384137.NullifyTimesCommunitiesChanges();
  21140.     },
  21141.  
  21142.     ForceRefreshMulticommunitiesChanges: function() {
  21143.         this.OnToolbarRefreshMulticommunitiesChanges(true);
  21144.         EBMCServerComm_CT2384137.GetCommunitiesChangesInfoFromServer();
  21145.     },
  21146.  
  21147.     LocationChange: function(strUrl) {
  21148.         if (!EBActionManager_CT2384137.IsToolbarShown()) {
  21149.             return;
  21150.         }
  21151.  
  21152.         if (EBMCDetect_CT2384137.IsDontCheckThisUrl(window._content.document.location.toString())) {
  21153.             EBMCButtonManager_CT2384137.CommunitiesNotDetected();
  21154.             return;
  21155.         }
  21156.  
  21157.         //check the url before document complete.
  21158.         var arrA = EBMCDetect_CT2384137.CheckUrl(strUrl);
  21159.         if (arrA.length != 0) {
  21160.             EBMCMenu_CT2384137.UpdateMenu(arrA);
  21161.             EBMCButtonManager_CT2384137.CommunitiesDetected();
  21162.         }
  21163.  
  21164.         EBMCButtonManager_CT2384137.CommunitiesNotDetected();
  21165.         this.DocumentComplete();
  21166.     },
  21167.  
  21168.     DocumentComplete: function() {
  21169.         if (!EBActionManager_CT2384137.IsToolbarMC() ||
  21170.             !EBActionManager_CT2384137.IsToolbarShown())
  21171.             return;
  21172.  
  21173.         if (EBMCDetect_CT2384137.IsDontCheckThisUrl(window._content.document.location.toString())) {
  21174.             EBMCButtonManager_CT2384137.CommunitiesNotDetected();
  21175.             return;
  21176.         }
  21177.  
  21178.         var cWin = getBrowser().contentWindow;
  21179.         var win = EBGlobalManager_CT2384137.GetWebPageJavascriptObject(cWin);
  21180.         var arrA = EBMCDetect_CT2384137.Detect(win);
  21181.         if (arrA != null) {
  21182.             EBMCMenu_CT2384137.UpdateMenu(arrA);
  21183.             EBMCButtonManager_CT2384137.CommunitiesDetected();
  21184.             //var strUrl = window._content.document.location;
  21185.  
  21186.             if (!this.arrDetectedDomains.Contains(arrA[0].url)) {
  21187.                 this.arrDetectedDomains.Add(arrA[0].url, true);
  21188.                 EBMCButtonManager_CT2384137.ShowPopup(arrA);
  21189.             }
  21190.         }
  21191.         else
  21192.             EBMCButtonManager_CT2384137.CommunitiesNotDetected();
  21193.     },
  21194.  
  21195.     //Source parameter is for usage
  21196.     GetAndChangeCommunity: function(strUrl, strSource) {
  21197.         EBMCIO_CT2384137.ChangeToCommunity(strUrl, strSource);
  21198.     },
  21199.  
  21200.     ChangeToCommunityFromApi: function(strCTID) {
  21201.         if (strCTID == EBGlobalConsts_CT2384137.ToolbarCTID) {
  21202.             this.ChangeToOriginal(EBUsageMyConduit_CT2384137.SourceApi);
  21203.             return;
  21204.         }
  21205.  
  21206.         objCommunity = this.GetCommunityFromExistingCommunitiesByCTID(strCTID);
  21207.         if (!objCommunity)
  21208.             throw (EBMCManager_CT2384137.Exception_CommunityNotExists)
  21209.  
  21210.         this.ChangeToCommunity(strCTID, objCommunity.Name, false, objCommunity, EBUsageMyConduit_CT2384137.SourceApi, false);
  21211.     },
  21212.  
  21213.     ChangeToCommunity: function(strCTID, strName, isFromMenu, objCommunity, strSource, bIsNew) {
  21214.         if (strCTID == EBActionManager_CT2384137.GetCTID()) return;
  21215.  
  21216.         //Send usage
  21217.         if (bIsNew) {
  21218.             EBUsageMyConduit_CT2384137.AddNewCommunity(this.AllCommunities.Count() + 1, EBActionManager_CT2384137.GetCTID(), strCTID, strSource);
  21219.             EBMCIO_CT2384137.AddCommunityToFile(objCommunity);
  21220.         }
  21221.         else
  21222.             EBUsageMyConduit_CT2384137.SwitchCommunity(this.AllCommunities.Count(), EBActionManager_CT2384137.GetCTID(), strCTID, strSource);
  21223.  
  21224.         EBCommunityPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CommunityChanged, false, strCTID)
  21225.  
  21226.         if (!objCommunity) {
  21227.             objCommunity = this.GetCommunityFromExistingCommunitiesByCTID(strCTID);
  21228.             //if user previosly deleted this toolbar, and now he added it's again,
  21229.             //must set not deleted in registry
  21230.             objCommunity.SetStatus(0);
  21231.         }
  21232.  
  21233.         if (isFromMenu)
  21234.             this.AllCommunities.CommunitySelected(strCTID);
  21235.         //if user previosly deleted this toolbar, and now he added it's again,
  21236.         //must set not deleted in registry
  21237.         else
  21238.             objCommunity.SetStatus(0);
  21239.  
  21240.         oToolbar_CT2384137.toolbar.switchToCommunity(EBGlobalConsts_CT2384137.ToolbarCTID,
  21241.                                                     EBActionManager_CT2384137.GetCTID(),
  21242.                                                     objCommunity.CTID);
  21243.     },
  21244.  
  21245.     RefreshAllToolbars: function(strCTID, objCommunity) {
  21246.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  21247.                         .getService(Components.interfaces.nsIWindowMediator);
  21248.  
  21249.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  21250.         var i = 0;
  21251.         while (objEnumerator.hasMoreElements()) {
  21252.             var objWindow = objEnumerator.getNext();
  21253.             if (objWindow.EBServerCommunicationManager_CT2384137.OnLoadToolbar
  21254.                 &&
  21255.                 objWindow.EBMCManager_CT2384137.DocumentComplete) {
  21256.                 //only one toolbar will write new community to file
  21257.                 if (i == 0)
  21258.                     objWindow.EBServerCommunicationManager_CT2384137.OnLoadToolbar(strCTID, objCommunity);
  21259.                 else
  21260.                     objWindow.EBServerCommunicationManager_CT2384137.OnLoadToolbar(strCTID);
  21261.  
  21262.                 objWindow.setTimeout(function() { objWindow.EBMCManager_CT2384137.DocumentComplete(); }, 1000);
  21263.             }
  21264.             i++;
  21265.         }
  21266.     },
  21267.  
  21268.     //stars logic
  21269.     UpdateMenuForStarLogic: function() {
  21270.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  21271.                         .getService(Components.interfaces.nsIWindowMediator);
  21272.  
  21273.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  21274.         while (objEnumerator.hasMoreElements()) {
  21275.             var objWindow = objEnumerator.getNext();
  21276.             if (objWindow.EBMCMenu_CT2384137.UpdateMenuForStarLogic) {
  21277.                 objWindow.EBMCMenu_CT2384137.UpdateMenuForStarLogic();
  21278.             }
  21279.         }
  21280.     },
  21281.  
  21282.     UpdateDetectDomainsList: function(arrDownloadDomains, arrExcludedDomains) {
  21283.         try {
  21284.             var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  21285.                             .getService(Components.interfaces.nsIWindowMediator);
  21286.  
  21287.             var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  21288.             while (objEnumerator.hasMoreElements()) {
  21289.                 var objWindow = objEnumerator.getNext();
  21290.                 if (objWindow.EBMCDetect_CT2384137.UpdateDomainsList)
  21291.                     EBMCDetect_CT2384137.UpdateDomainsList(arrDownloadDomains, arrExcludedDomains);
  21292.             }
  21293.         }
  21294.         catch (ex)
  21295.         { }
  21296.     },
  21297.  
  21298.     GetCommunityNameFromInstallationUrl: function(strUrl) {
  21299.         if (!strUrl) return null;
  21300.         var iDotIndex = strUrl.indexOf(".");
  21301.         if (iDotIndex != -1)
  21302.             return strUrl.slice(0, iDotIndex);
  21303.  
  21304.         return strUrl;
  21305.     },
  21306.  
  21307.     IsOriginalToolbar: function(strUrl) {
  21308.         var strWebServerUrl = EBGlobalConsts_CT2384137.WebServerUrl;
  21309.         strWebServerUrl = strWebServerUrl.toLowerCase();
  21310.         strUrl = strUrl.toLowerCase();
  21311.         if (strWebServerUrl.indexOf(strUrl) != -1)
  21312.             return true;
  21313.         else
  21314.             return false;
  21315.     },
  21316.  
  21317.     IsCommunityExists: function(strUrl) {
  21318.         if (this.AllCommunities)
  21319.             return this.AllCommunities.IsExists(strUrl);
  21320.         else
  21321.             return false;
  21322.     },
  21323.  
  21324.     GetCTIDFromExistingCommunitiesByInstallUrl: function(strUrl) {
  21325.         return this.AllCommunities.GetCTIDByInstallationUrl(strUrl);
  21326.     },
  21327.  
  21328.     GetCommunityFromExistingCommunitiesByInstallUrl: function(strUrl) {
  21329.         return this.AllCommunities.GetCommunityByInstallationUrl(strUrl);
  21330.     },
  21331.  
  21332.     GetCommunityFromExistingCommunitiesByCTID: function(strCTID) {
  21333.         return this.AllCommunities.GetCommunityByCTID(strCTID);
  21334.     },
  21335.  
  21336.     ChangeToOriginal: function(strSource) {
  21337.         strCTID = EBGlobalConsts_CT2384137.ToolbarCTID;
  21338.         this.ChangeToCommunity(strCTID, null, true, null, strSource, false);
  21339.     },
  21340.  
  21341.     GetSelectedCTID: function() {
  21342.         return EBActionManager_CT2384137.GetCTID();
  21343.     },
  21344.  
  21345.     IsSelectedOriginalCommunity: function() {
  21346.         return (this.GetSelectedCTID() == "CT2384137")
  21347.     },
  21348.  
  21349.     GetCommunitySettingsPath: function() {
  21350.         return EBMCConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + this.GetSelectedCTID() + EBDirIO_CT2384137.sep;
  21351.     },
  21352.  
  21353.     BroadcastChanges: function(objCommunities) {
  21354.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  21355.                         .getService(Components.interfaces.nsIWindowMediator);
  21356.  
  21357.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  21358.         while (objEnumerator.hasMoreElements()) {
  21359.             var objWindow = objEnumerator.getNext();
  21360.             if (objWindow.EBMCManager_CT2384137.UpdateCommunities) {
  21361.                 objWindow.EBMCManager_CT2384137.UpdateCommunities(objCommunities);
  21362.             }
  21363.         }
  21364.     },
  21365.  
  21366.     UpdateCommunities: function(objCommunities) {
  21367.         this.AllCommunities = objCommunities;
  21368.         EBMCMenu_CT2384137.OnLoad(this.AllCommunities);
  21369.     },
  21370.  
  21371.     //Detect toolbar download
  21372.     OnBeforeNavigate: function(strUrl) {
  21373.         var arrA = EBMCDetect_CT2384137.CheckUrl(strUrl);
  21374.  
  21375.         if (arrA.length != 0 && !window.ToolbarDetected) {
  21376.             window.ToolbarDetected = true;
  21377.             this.ToolbarDownloadDetected(arrA[0]);
  21378.         }
  21379.     },
  21380.  
  21381.     IsDownloadUrlIsOriginalCommunity: function(strUrl) {
  21382.         var strToolbarName = this.GetCommunityNameFromInstallationUrl(strUrl);
  21383.         var iStart = EBGlobalConsts_CT2384137.WebServerUrl.indexOf('.');
  21384.         if (iStart != -1) {
  21385.             var strOToolbarName = EBGlobalConsts_CT2384137.WebServerUrl.substr(0, iStart);
  21386.             strOToolbarName = strOToolbarName.replace(/http:\/\//, '');
  21387.             if (strToolbarName == strOToolbarName ||
  21388.                 strToolbarName == EBGlobalConsts_CT2384137.ToolbarCTID ||
  21389.                 strToolbarName == EBGlobalConsts_CT2384137.ToolbarId) {
  21390.                 return true;
  21391.             }
  21392.             else {
  21393.                 return false;
  21394.             }
  21395.         }
  21396.  
  21397.         return false;
  21398.     },
  21399.  
  21400.     ToolbarDownloadDetected: function(strUrl) {
  21401.         //if downloading toolbar is the original toolbar and currently shown, don't popup selector dialog
  21402.         if (this.IsSelectedOriginalCommunity() && this.IsDownloadUrlIsOriginalCommunity(strUrl))
  21403.             return;
  21404.  
  21405.         EBMCDialog_CT2384137.OpenDownloadDialog(strUrl);
  21406.     },
  21407.  
  21408.     NavigationStop: function() {
  21409.         var objTimeout = function() {
  21410.             window.ToolbarDetected = false;
  21411.         };
  21412.         setTimeout(objTimeout, 500);
  21413.  
  21414.         var oWebNav = getBrowser().webNavigation;
  21415.         var fStop = function() {
  21416.             oWebNav.stop(Components.interfaces.nsIWebNavigation.STOP_ALL);
  21417.         }
  21418.         setTimeout(fStop, 1);
  21419.     },
  21420.  
  21421.     BroadcastGrouping: function(objGrouping) {
  21422.         this.AllCommunities.UpdateGrouping(objGrouping);
  21423.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  21424.                         .getService(Components.interfaces.nsIWindowMediator);
  21425.  
  21426.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  21427.         while (objEnumerator.hasMoreElements()) {
  21428.             var objWindow = objEnumerator.getNext();
  21429.             if (objWindow.EBMCManager_CT2384137.UpdateCommunities) {
  21430.                 objWindow.EBMCManager_CT2384137.UpdateCommunities(this.AllCommunities);
  21431.             }
  21432.         }
  21433.     },
  21434.  
  21435.     BroadcastCurrentGrouping: function(objGrouping) {
  21436.         this.AllCommunities.UpdateCurrentGrouping(objGrouping);
  21437.  
  21438.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  21439.                         .getService(Components.interfaces.nsIWindowMediator);
  21440.  
  21441.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  21442.         while (objEnumerator.hasMoreElements()) {
  21443.             var objWindow = objEnumerator.getNext();
  21444.             if (objWindow.EBMCManager_CT2384137.UpdateCommunities) {
  21445.                 objWindow.EBMCManager_CT2384137.UpdateCommunities(this.AllCommunities);
  21446.             }
  21447.         }
  21448.     }
  21449. }
  21450.  
  21451. // +++++++++++ Multicommunity Language Pack +++++++++++++++++
  21452.  
  21453. var EBMCLanguagePack_CT2384137 =
  21454. {
  21455.     OnLoad : function()
  21456.     {
  21457.         var locale = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale,true);
  21458.         
  21459.         EBMCMenu_CT2384137.MenuItemInitText = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_MENU_COMMUNITY_TOOLBAR_DETECTED');
  21460.         EBMCMenu_CT2384137.ConduitNetworkText = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_MENU_NETWORK');
  21461.         EBMCMenu_CT2384137.OptionsText = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_MENU_OPTIONS');
  21462.         EBMCMenu_CT2384137.DetectedTooltipText = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_MENU_COMMUNITY_TOOLBAR_DETECTED');
  21463.         EBMCMenu_CT2384137.SwitchTo = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_MENU_COMMUNITY_SWITCH_TO_DETECTED_TOOLBAR');
  21464.         EBMCMenu_CT2384137.SearchForText = oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_CANDIDATE_SEARCH_FOR');
  21465.     },
  21466.     
  21467.     Dialog_OnLoad : function(objWindow,objDialog)
  21468.     {
  21469.         var locale = objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale,true);
  21470.         var objShowHide = new Object();
  21471.             objShowHide.show = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_SHOW_COMPONENT_BUTTON');
  21472.             objShowHide.hide = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_HIDE_COMPONENT_BUTTON');
  21473.         
  21474.         //objDialog.oDownBtn.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_OPTIONS_DLG_MOVE_DOWN_BUTT'));
  21475.         //objDialog.oUpBtn.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_OPTIONS_DLG_MOVE_UP_BUTT'));
  21476.         objDialog.oDeleteBtn.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_OPTIONS_DLG_REMOVE_BUTT'));
  21477.         objDialog.oHideBtn.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_HIDE_COMPONENT_BUTTON'));
  21478.         objDialog.oAcceptBtn.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK'));
  21479.         objDialog.oCancelBtn.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL'));
  21480.         objDialog.oDescription.innerHTML = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_OPTIONS_DLG_STATIC')
  21481.         window.title = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_OPTIONS_DLG_CAPTION');
  21482.         return objShowHide;
  21483.     },
  21484.     
  21485.     DownloadDialog_OnLoad : function(objWindow,iMode,strCommunityName)
  21486.     {
  21487.         var locale        = objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale,true);
  21488.         var descText    = document.getElementById("descText");
  21489.         var radio_add    = document.getElementById("radio_add");
  21490.         var radio_new    = document.getElementById("radio_new");
  21491.         var accept        = document.getElementById("ebMulticommunityDownloadDialog").getButton("accept");
  21492.         var cancel        = document.getElementById("ebMulticommunityDownloadDialog").getButton("cancel");
  21493.         var lblLearnMore= document.getElementById("lnkLearnMore");
  21494.         
  21495.         
  21496.         window.title = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_COMMUNITY_ADD_WARNING_DLG_CAPTION');
  21497.         
  21498.         accept.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_OK'));
  21499.         cancel.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL'));
  21500.         
  21501.         switch(iMode)
  21502.         {
  21503.             case 0:
  21504.                     radio_add.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_COMMUNITY_ADD_WARNING_DLG_ADD'));
  21505.                     radio_new.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_ADD_COMMUNITY_WARNING_INSTALL'));
  21506.                     break;
  21507.             case 1:
  21508.                     radio_add.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_MENU_COMMUNITY_SWITCH_TO_DETECTED_TOOLBAR') + strCommunityName);
  21509.                     radio_new.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_ADD_COMMUNITY_WARNING_REINSTALL').replace(/{TOOLBAR_NAME}/,strCommunityName));
  21510.                     break;
  21511.             case 2:
  21512.                     radio_add.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_MENU_COMMUNITY_SWITCH_TO_DETECTED_TOOLBAR') + strCommunityName);
  21513.                     radio_new.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_CHANNEL_ADD_COMMUNITY_WARNING_INSTALL'));
  21514.                     break;
  21515.         }
  21516.  
  21517.         descText.innerHTML = objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MULTI_COMMUNITY_ADD_WARNING_DLG_TXT').replace(/\n/g,'');
  21518.         lblLearnMore.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_LEARN_MORE'));
  21519.     },
  21520.     
  21521.     Detected_OnLoad : function(objWindow)
  21522.     {
  21523.         var locale        = objWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale,true);
  21524.         var chkDontShow = document.getElementById('chkDontShowAgain');
  21525.         chkDontShow.setAttribute('label',objWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_DO_NOT_SHOW_AGAIN'));
  21526.     }
  21527. }
  21528.  
  21529. // +++++++++++ Multicommunity Language Pack +++++++++++++++++
  21530. var EBMCMenu_CT2384137 =
  21531. {
  21532.     xulMenuObj: null,
  21533.     MenuItemNewCommunityNameAtt: 'communityNew',
  21534.     MenuItemCommunityNameAtt: 'community',
  21535.     MenuItemGroupingNameAtt: 'community_group',
  21536.     MenuItemRecentNameAtt: 'recent',
  21537.     MenuItemSeparatorNameAtt: 'separator',
  21538.     MenuItemDetectedPrefix: 'DetectedCommunity_CT2384137',
  21539.  
  21540.     MenuItemInitText: 'Community Toolbar Detected',
  21541.     ConduitNetworkText: 'Search the Conduit Network',
  21542.     SearchForText: 'Search the Conduit Network for',
  21543.     SwitchTo: 'Switch To - ',
  21544.     OptionsText: 'Edit',
  21545.     DetectedTooltipText: 'Communiy Toolbar Detected',
  21546.  
  21547.     MenuItemInitIcon: 'chrome://iobitcom/skin/mc_add_inactive.png',
  21548.     MenuItemCommunity: 'chrome://iobitcom/skin/mc_community.png',
  21549.     MenuItemCommunitySelected: 'chrome://iobitcom/skin/mc_community_selected.png',
  21550.     MenuItemCommunity50: 'chrome://iobitcom/skin/mc_community_50.png',
  21551.     MaxNewDetectedInMenu: 5,
  21552.  
  21553.     EmptyPrevCommunities: function(xulMenuPopup) {
  21554.         while (xulMenuPopup.firstChild.getAttribute('name') == this.MenuItemNewCommunityNameAtt) {
  21555.             xulMenuPopup.removeChild(xulMenuPopup.firstChild);
  21556.         }
  21557.     },
  21558.  
  21559.     EmptyExistingCommunities: function(xulMenuPopup) {
  21560.         var attrName = "";
  21561.         for (var i = xulMenuPopup.childNodes.length - 1; i > 4; i--) {
  21562.             attrName = xulMenuPopup.childNodes[i].getAttribute('name');
  21563.  
  21564.             if ((attrName == this.MenuItemCommunityNameAtt ||
  21565.                 attrName == this.MenuItemSeparatorNameAtt + "2") && xulMenuPopup.childNodes[i].hasAttribute("EB_CHANGE_TO")) {
  21566.                 xulMenuPopup.removeChild(xulMenuPopup.childNodes[i]);
  21567.                 if (attrName == this.MenuItemSeparatorNameAtt + "2")
  21568.                     return;
  21569.             }
  21570.         }
  21571.     },
  21572.  
  21573.     EmptyExistingGroup: function(xulMenuPopup) {
  21574.         var attrName = "";
  21575.         for (var i = xulMenuPopup.childNodes.length - 1; i >= 0; i--) {
  21576.             attrName = xulMenuPopup.childNodes[i].getAttribute('name');
  21577.  
  21578.             if (attrName == this.MenuItemGroupingNameAtt
  21579.                 ||
  21580.                 attrName == this.MenuItemSeparatorNameAtt + "1") {
  21581.                 xulMenuPopup.removeChild(xulMenuPopup.childNodes[i]);
  21582.                 if (attrName == this.MenuItemSeparatorNameAtt + "1") {
  21583.                     return;
  21584.                 }
  21585.             }
  21586.         }
  21587.  
  21588.     },
  21589.  
  21590.     EmptyExistingRecent: function(xulMenuPopup) {
  21591.         var attrName = "";
  21592.         for (var i = xulMenuPopup.childNodes.length - 1; i >= 0; i--) {
  21593.             attrName = xulMenuPopup.childNodes[i].getAttribute('name');
  21594.  
  21595.             if (attrName == this.MenuItemRecentNameAtt
  21596.                 ||
  21597.                 attrName == this.MenuItemSeparatorNameAtt + "3") {
  21598.                 xulMenuPopup.removeChild(xulMenuPopup.childNodes[i]);
  21599.                 if (attrName == this.MenuItemSeparatorNameAtt + "3") {
  21600.                     return;
  21601.                 }
  21602.             }
  21603.         }
  21604.     },
  21605.  
  21606.     CreateNewCommunityXulMenuItem: function(objDetected) {
  21607.         var strCaption = objDetected.url;
  21608.         var objCommunity = null;
  21609.         if (objDetected.IsExists) {
  21610.             objCommunity = EBMCManager_CT2384137.GetCommunityFromExistingCommunitiesByInstallUrl(objDetected.url);
  21611.             strCaption = this.SwitchTo + " " + objCommunity.Name;
  21612.         }
  21613.  
  21614.         var xulMenuItem = EBXULFactory_CT2384137.CreateMenuItem(strCaption, oToolbarSkin_CT2384137.groupActiveImageUrl, "", "", "", null);
  21615.         xulMenuItem.setAttribute('id', this.MenuItemDetectedPrefix + objDetected.url);
  21616.         xulMenuItem.setAttribute('name', this.MenuItemNewCommunityNameAtt);
  21617.  
  21618.         xulMenuItem.addEventListener("command", function(e) {
  21619.             if (objDetected.IsExists && objCommunity)
  21620.                 EBMCManager_CT2384137.ChangeToCommunity(objCommunity.CTID, objCommunity.Name, true, null, EBUsageMyConduit_CT2384137.SourceMenu, false);
  21621.             else {
  21622.                 EBMCMenu_CT2384137.RemoveMeFromDetector(xulMenuItem);
  21623.                 setTimeout(function() { EBMCTrusteDialog_CT2384137.open(objDetected.url, EBUsageMyConduit_CT2384137.SourceMenu); }, 1);
  21624.             }
  21625.  
  21626.             e.cancelBubble = true;
  21627.         }, false);
  21628.  
  21629.         return xulMenuItem;
  21630.     },
  21631.  
  21632.     RemoveMeFromDetector: function(obj) {
  21633.         var xulMenu = this.xulMenuObj.childNodes[0];
  21634.         xulMenu.removeChild(obj);
  21635.         //if this was the last detected community, create "no communities detected node",
  21636.         //and change to not detected icon.
  21637.         var firstNode = xulMenu.childNodes[0];
  21638.         if (firstNode.getAttribute("name") == this.MenuItemSeparatorNameAtt + "0") {
  21639.             EBMCButtonManager_CT2384137.CommunitiesNotDetected();
  21640.         }
  21641.     },
  21642.  
  21643.     UpdateDetectedCommunities: function(xulMenuPopup, arrDetected) {
  21644.         var xulMenuItem = null;
  21645.         var obj = null;
  21646.         var numOfDetected = (arrDetected.length > this.MaxNewDetectedInMenu) ? this.MaxNewDetectedInMenu : arrDetected.length;
  21647.         for (var i = 0; i < numOfDetected; i++) {
  21648.             xulMenuItem = this.CreateNewCommunityXulMenuItem(arrDetected[i]);
  21649.             xulMenuPopup.insertBefore(xulMenuItem, xulMenuPopup.firstChild);
  21650.         }
  21651.     },
  21652.  
  21653.     UpdateMenu: function(arrDetected) {
  21654.         var xulMenu = this.xulMenuObj.childNodes[0];
  21655.         this.EmptyPrevCommunities(xulMenu);
  21656.         this.UpdateDetectedCommunities(xulMenu, arrDetected);
  21657.     },
  21658.  
  21659.     UpdateMenuForStarLogic: function() {
  21660.         var xulMenuPopup = this.xulMenuObj.firstChild;
  21661.  
  21662.         if (!xulMenuPopup)
  21663.             return;
  21664.  
  21665.         var xulMenu = null;
  21666.         var strCTID = "";
  21667.         for (var i = 0; i < xulMenuPopup.childNodes.length; i++) {
  21668.             xulMenu = xulMenuPopup.childNodes[i];
  21669.             strCTID = xulMenu.getAttribute('EB_CTID');
  21670.             if (strCTID && EBCommunityPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.CommunityChanged, strCTID)) {
  21671.                 this.ChangeIconToStar(xulMenu);
  21672.             }
  21673.         }
  21674.     },
  21675.  
  21676.     ChangeIconToStar: function(xulMenu) {
  21677.         if (xulMenu.getAttribute('EBchecked').toLowerCase() == "true") {
  21678.             return;
  21679.         }
  21680.         else {
  21681.             xulMenu.setAttribute(EBImageHandler_CT2384137.Consts.IsToStarAttribute, 'true');
  21682.         }
  21683.     },
  21684.  
  21685.     CommunitiesNotDetected: function(strDomain) {
  21686.         var xulMenuPopup = this.xulMenuObj.childNodes[0];
  21687.         this.EmptyPrevCommunities(xulMenuPopup);
  21688.         var strName = this.MenuItemInitText;
  21689.         var strIcon = this.MenuItemInitIcon;
  21690.         var strHint = this.MenuItemInitHint;
  21691.         var objCommand = null;
  21692.         var strDisabled = "true";
  21693.  
  21694.         if (strDomain) {
  21695.             strName = this.SearchForText + " \"" + strDomain + "\"";
  21696.             objCommand = function(event) {
  21697.                 EBMCManager_CT2384137.OnClickSearch(event, null, strDomain);
  21698.                 event.cancelBubble = true;
  21699.             };
  21700.             strDisabled = "false";
  21701.         }
  21702.  
  21703.         var xulMenuItem = EBXULFactory_CT2384137.CreateMenuItem(strName, strIcon, strHint, objCommand, "", null);
  21704.         xulMenuItem.setAttribute('id', this.MenuItemDetectedPrefix);
  21705.         xulMenuItem.setAttribute('name', this.MenuItemNewCommunityNameAtt);
  21706.         xulMenuItem.setAttribute('disabled', strDisabled);
  21707.  
  21708.         xulMenuPopup.insertBefore(xulMenuItem, xulMenuPopup.firstChild)
  21709.     },
  21710.  
  21711.     BuildSection: function(xulMenu, ObjCommunities, nameAttr, seperatorNameAttr, bIsReversedOrder) {
  21712.         if (ObjCommunities && !ObjCommunities.IsEmpty()) {
  21713.             var objFirst = null
  21714.             var j = ObjCommunities.Count();
  21715.             var xulMenuItem, oCommunity;
  21716.  
  21717.             for (var i = 0; i < ObjCommunities.Count(); i++) {
  21718.                 if (bIsReversedOrder) j--;
  21719.                 else j = i;
  21720.  
  21721.                 oCommunity = ObjCommunities.GetByIndex(j);
  21722.                 if (oCommunity.Status == 0) {
  21723.                     xulMenuItem = this.CreateNewCommunityMenuItem(oCommunity, nameAttr);
  21724.                     xulMenu.appendChild(xulMenuItem);
  21725.                     if (!objFirst) objFirst = xulMenuItem;
  21726.                 }
  21727.             }
  21728.  
  21729.             if (objFirst) {
  21730.                 var xulMenuSeparator = EBXULFactory_CT2384137.CreateMenuSeparator();
  21731.                 xulMenuSeparator.setAttribute('name', seperatorNameAttr);
  21732.                 xulMenu.appendChild(xulMenuSeparator);
  21733.                 xulMenu.insertBefore(xulMenuSeparator, objFirst);
  21734.             }
  21735.         }
  21736.     },
  21737.  
  21738.     OnLoad: function(objCommunities) {
  21739.         var oCommunity = null;
  21740.         var xulMenu = this.xulMenuObj.childNodes[0];
  21741.  
  21742.         this.EmptyExistingCommunities(xulMenu);
  21743.         this.EmptyExistingGroup(xulMenu);
  21744.         this.EmptyExistingRecent(xulMenu);
  21745.  
  21746.         //Build Recent menu section
  21747.         if (objCommunities.Recent && !objCommunities.Recent.IsEmpty()) {
  21748.             this.BuildSection(xulMenu, objCommunities.Recent, this.MenuItemRecentNameAtt, this.MenuItemSeparatorNameAtt + "3", true);
  21749.         }
  21750.  
  21751.         //Build Grouping menu section
  21752.         if (objCommunities.Grouping && !objCommunities.Grouping.IsEmpty()) {
  21753.             this.BuildSection(xulMenu, objCommunities.Grouping, this.MenuItemGroupingNameAtt, this.MenuItemSeparatorNameAtt + "1", false);
  21754.         }
  21755.  
  21756.         //Build User menu section
  21757.         if (objCommunities.User && !objCommunities.User.IsEmpty()) {
  21758.             this.BuildSection(xulMenu, objCommunities.User, this.MenuItemCommunityNameAtt, this.MenuItemSeparatorNameAtt + "2", false);
  21759.         }
  21760.     },
  21761.  
  21762.     UpdateGrouping: function(xmlGroup) {
  21763.         var xulMenuItem = null;
  21764.         var xulMenu = this.xulMenuObj.childNodes[0];
  21765.         this.EmptyExistingGroup(xulMenu);
  21766.         var xulMenuItemInsertBefore = this.FindInsertBeforeMenuItem(xulMenu);
  21767.  
  21768.         var xulMenuSeparator = EBXULFactory_CT2384137.CreateMenuSeparator();
  21769.         xulMenuSeparator.setAttribute('name', this.MenuItemSeparatorNameAtt + "1");
  21770.         xulMenuSeparator.style.display = 'none';
  21771.  
  21772.         if (xulMenuItemInsertBefore) {
  21773.             xulMenu.insertBefore(xulMenuSeparator, xulMenuItemInsertBefore);
  21774.         }
  21775.         else {
  21776.             xulMenu.appendChild(xulMenuSeparator);
  21777.         }
  21778.         for (var i = 0; i < xmlGroup.childNodes.length; i++) {
  21779.             xulMenuItem = this.CreateNewCommunityMenuItemFromXML(xmlGroup.childNodes[i], this.MenuItemGroupingNameAtt);
  21780.             if (xulMenuItemInsertBefore) {
  21781.                 xulMenu.insertBefore(xulMenuItem, xulMenuItemInsertBefore);
  21782.             }
  21783.             else {
  21784.                 xulMenu.appendChild(xulMenuItem);
  21785.             }
  21786.         }
  21787.     },
  21788.  
  21789.     FindInsertBeforeMenuItem: function(xulMenu) {
  21790.         var nameAtt = "";
  21791.         var commandAtt = "";
  21792.         for (var i = 0; i < xulMenu.childNodes.length; i++) {
  21793.             if (xulMenu.childNodes[i].hasAttribute("EB_CHANGE_TO")) {
  21794.                 if (i < xulMenu.childNodes.length - 1)
  21795.                     return xulMenu.childNodes[i + 1];
  21796.                 else
  21797.                     return null;
  21798.             }
  21799.         }
  21800.     },
  21801.  
  21802.     CreateNewCommunityMenuItem: function(oCommunity, nameAtt) {
  21803.         var strCaption = oCommunity.Name;
  21804.         var strCTID = oCommunity.CTID;
  21805.         var strHint = oCommunity.InstallationUrl
  21806.         var objCommand = function(event) { EBMCManager_CT2384137.ChangeToCommunity(strCTID, strCaption, true, null, EBUsageMyConduit_CT2384137.SourceMenu, false); };
  21807.         var strIcon = this.MenuItemCommunity;
  21808.  
  21809.         if (EBMCManager_CT2384137.GetSelectedCTID() == strCTID)
  21810.             strIcon = this.MenuItemCommunitySelected;
  21811.  
  21812.         var xulMenuItem = EBXULFactory_CT2384137.CreateMenuItem(strCaption, this.MenuItemCommunity, strHint, objCommand, "", null);
  21813.         xulMenuItem.setAttribute('id', this.MenuItemDetectedPrefix + strCaption);
  21814.         xulMenuItem.setAttribute('name', nameAtt);
  21815.         xulMenuItem.setAttribute('EB_CTID', strCTID);
  21816.         
  21817.         if (EBMCManager_CT2384137.GetSelectedCTID() == strCTID)
  21818.             this.SetMenuSelected(xulMenuItem);
  21819.  
  21820.         return xulMenuItem;
  21821.     },
  21822.  
  21823.     SetMenuSelected: function(xulMenuItem) {
  21824.         xulMenuItem.setAttribute('EBchecked', 'true');
  21825.         xulMenuItem.setAttribute("class", "menuitem-iconic");
  21826.         xulMenuItem.setAttribute("image", this.MenuItemCommunitySelected);
  21827.         xulMenuItem.setAttribute("style", EBToolbarDesignConsts_CT2384137.ToolbarMaxImageHeightStyle + ';font-weight:bold');
  21828.     },
  21829.  
  21830.     SetMenuNotSelected: function(xulMenuItem) {
  21831.         xulMenuItem.setAttribute('EBchecked', 'false');
  21832.         xulMenuItem.setAttribute("class", "menuitem-iconic");
  21833.         xulMenuItem.setAttribute("image", this.MenuItemCommunity);
  21834.         xulMenuItem.setAttribute("style", EBToolbarDesignConsts_CT2384137.ToolbarMaxImageHeightStyle);
  21835.     },
  21836.  
  21837.     OnCommunitySelect: function(strId) {
  21838.         var xulMenu = this.xulMenuObj.childNodes[0];
  21839.         var xulMenuItem = null;
  21840.         for (var i = 0; i < xulMenu.childNodes.length; i++) {
  21841.             xulMenuItem = xulMenu.childNodes[i];
  21842.             if (xulMenuItem.getAttribute('name') == this.MenuItemCommunityNameAtt) {
  21843.                 if (xulMenuItem.getAttribute('id') == strId) {
  21844.                     this.SetMenuSelected(xulMenuItem);
  21845.                 }
  21846.                 else {
  21847.                     this.SetMenuNotSelected(xulMenuItem);
  21848.                 }
  21849.             }
  21850.         }
  21851.     },
  21852.  
  21853.     OnNewCommunitySelect: function(xulSelected) {
  21854.         var xulMenu = this.xulMenuObj.childNodes[0];
  21855.         var xulMenuItem, xulMenuItemInsertBefore = null;
  21856.  
  21857.         var isAppend = false;
  21858.         var foundFirst = true;
  21859.         for (var i = 0; i < xulMenu.childNodes.length; i++) {
  21860.             xulMenuItem = xulMenu.childNodes[i];
  21861.             if (xulMenuItem.getAttribute('name') == this.MenuItemCommunityNameAtt) {
  21862.                 if (foundFirst) {
  21863.                     if (i == xulMenu.childNodes.length - 1) {
  21864.                         isAppend = true;
  21865.                     }
  21866.                     else {
  21867.                         xulMenuItemInsertBefore = xulMenu.childNodes[i + 1];
  21868.                     }
  21869.                     foundFirst = false;
  21870.                 }
  21871.  
  21872.                 this.SetMenuNotSelected(xulMenuItem);
  21873.             }
  21874.         }
  21875.         xulSelected.setAttribute('name', this.MenuItemCommunityNameAtt);
  21876.         if (isAppend) {
  21877.             xulMenu.appendChild(xulSelected);
  21878.         }
  21879.         else {
  21880.             xulMenu.insertBefore(xulSelected, xulMenuItemInsertBefore);
  21881.         }
  21882.         this.SetMenuSelected(xulSelected);
  21883.     }
  21884. };
  21885.  
  21886. //Radio Recent Media List Class
  21887. function EBRecentCommunityList_CT2384137(XMLDoc,strFullFilePath)
  21888. {
  21889.     this.Add = function(oCommunity)
  21890.     {
  21891.         if(this.Contains(oCommunity))
  21892.             this.Remove(oCommunity);
  21893.  
  21894.         if(this.CommunitiesHash.Count() == EBMCManager_CT2384137.MaxRecent)
  21895.         {
  21896.             var oCommunityToRemove = this.CommunitiesHash.GetByIndex(0);
  21897.             this.CommunitiesHash.Remove(0,oCommunityToRemove.CTID);
  21898.         }
  21899.         this.CommunitiesHash.Add(oCommunity.CTID,oCommunity);
  21900.     };
  21901.  
  21902.     this.Contains = function(oCommunity)
  21903.     {
  21904.         return this.CommunitiesHash.Contains(oCommunity.CTID);
  21905.     };
  21906.  
  21907.     this.Remove = function(oCommunity)
  21908.     {
  21909.         if(this.Contains(oCommunity))
  21910.         {
  21911.             var index = this.GetIndexByCommunity(oCommunity)
  21912.             this.CommunitiesHash.Remove(index,oCommunity.CTID);
  21913.         }    
  21914.     };
  21915.     
  21916.     this.GetIndexByCommunity = function(oCommunity)
  21917.     {
  21918.         var iCommunity = null;
  21919.         
  21920.         for(var i=0;this.CommunitiesHash.Count();i++)
  21921.         {
  21922.             iCommunity = this.CommunitiesHash.GetByIndex(i);
  21923.             if(iCommunity.CTID == oCommunity.CTID)
  21924.             {
  21925.                 return i;
  21926.             }
  21927.         }
  21928.         
  21929.         return -1;
  21930.     };
  21931.     
  21932.     if(XMLDoc && XMLDoc.childNodes.length != 0)
  21933.     {
  21934.         this.CommunitiesHash = new EBArrayHashObject_CT2384137();
  21935.         this.InitList(XMLDoc);
  21936.     }
  21937.     else
  21938.     {
  21939.         this.CommunitiesHash = new EBArrayHashObject_CT2384137();
  21940.     }
  21941.     
  21942.     this.FullFilePath   = strFullFilePath;
  21943.  
  21944. }
  21945.  
  21946. EBRecentCommunityList_CT2384137.prototype = new EBMCCommunityList_CT2384137;
  21947. var EBMCServerComm_CT2384137 =
  21948. {
  21949.     timeoutFunc: null,
  21950.     timeoutFuncCurrent: null,
  21951.     //****************************************************************************
  21952.     //                                  Grouping
  21953.     //****************************************************************************
  21954.     InitGrouping: function(bIsEmpty) {
  21955.         //Set grouping check interval.
  21956.         var iGroupingInterval = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingServerCheckInterval);
  21957.         if (iGroupingInterval != null && iGroupingInterval) {
  21958.             EBMCConsts_CT2384137.GroupingServerCheckInterval = iGroupingInterval;
  21959.             if (EBMCConsts_CT2384137.GroupingServerOnErrorInterval >= iGroupingInterval) {
  21960.                 EBMCConsts_CT2384137.GroupingServerOnErrorInterval = parseInt(iGroupingInterval / 2);
  21961.             }
  21962.         }
  21963.  
  21964.         var timeOut;
  21965.  
  21966.         if (bIsEmpty) {
  21967.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckTime, '0');
  21968.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastServerUpdateTime, '0');
  21969.         }
  21970.  
  21971.         var IsResponded;
  21972.         if (this.IsRequestGrouping()) {
  21973.             this.GetGroupInfoFromServer();
  21974.             IsResponded = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse);
  21975.             IsResponded = (IsResponded == null) ? false : IsResponded;
  21976.  
  21977.             if (!IsResponded)
  21978.                 timeOut = this.GetDifference(!IsResponded, true);
  21979.             else
  21980.                 timeOut = EBMCConsts_CT2384137.GroupingServerCheckInterval * 60 * 1000;
  21981.         }
  21982.         else {
  21983.             IsResponded = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse);
  21984.             IsResponded = (IsResponded == null) ? false : IsResponded;
  21985.  
  21986.             timeOut = this.GetDifference(!IsResponded, true);
  21987.         }
  21988.  
  21989.         this.timeoutFunc = setTimeout(function() { EBMCServerComm_CT2384137.InitGrouping(false); }, timeOut);
  21990.     },
  21991.  
  21992.     GetDifference: function(isError, isNextCheckTime, bIsCurrent) {
  21993.         var now = Date();
  21994.         var lastCheckTime = "";
  21995.         var milliDif = 0;
  21996.  
  21997.         if (!bIsCurrent) bIsCurrent = false;
  21998.  
  21999.         if (isError) {
  22000.             lastCheckTime = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckTime, bIsCurrent);
  22001.             if (isNextCheckTime)
  22002.                 milliDif = EBMCConsts_CT2384137.GroupingServerOnErrorInterval * 60 * 1000 - (Date.parse(now) - Date.parse(lastCheckTime));
  22003.             else {
  22004.                 if (lastCheckTime)
  22005.                     milliDif = Date.parse(now) - Date.parse(lastCheckTime);
  22006.                 else
  22007.                     milliDif = EBMCConsts_CT2384137.GroupingServerCheckInterval * 60 * 1000;
  22008.             }
  22009.         }
  22010.         else {
  22011.             lastCheckTime = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckTime, bIsCurrent);
  22012.             if (isNextCheckTime)
  22013.                 milliDif = EBMCConsts_CT2384137.GroupingServerCheckInterval * 60 * 1000 - (Date.parse(now) - Date.parse(lastCheckTime));
  22014.             else
  22015.                 milliDif = Date.parse(now) - Date.parse(lastCheckTime);
  22016.         }
  22017.  
  22018.         return milliDif;
  22019.     },
  22020.  
  22021.     IsRequestGrouping: function(bIsCurrent) {
  22022.         if (!bIsCurrent) bIsCurrent = false;
  22023.  
  22024.         var now = Date();
  22025.         var timeOut = 0;
  22026.         var lastCheckTime = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckTime, bIsCurrent);
  22027.         var IsResponded = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse, bIsCurrent);
  22028.         var lastErrorCode = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastErrorCode, bIsCurrent);
  22029.  
  22030.         if (!lastCheckTime || lastCheckTime == "0") {
  22031.             return true;
  22032.         }
  22033.  
  22034.         if (!IsResponded) {
  22035.             timeOut = EBMCConsts_CT2384137.GroupingServerOnErrorInterval * 60 * 1000;
  22036.             var timePased = this.GetDifference(true, false, bIsCurrent);
  22037.             if (timePased >= timeOut)
  22038.                 return true;
  22039.         }
  22040.         else {
  22041.             var milliDif = this.GetDifference(false, false, bIsCurrent);
  22042.             timeOut = EBMCConsts_CT2384137.GroupingServerCheckInterval * 60 * 1000;
  22043.             if (milliDif >= timeOut)
  22044.                 return true;
  22045.         }
  22046.  
  22047.         // all ok, no need to check
  22048.         return false;
  22049.     },
  22050.  
  22051.     GetGroupInfoFromServer: function(bIsFromSelectFromGroupingByLocale) {
  22052.         var oCallBackFunction = function(strXML, o) {
  22053.             strXML = EBXML_CT2384137.LegalizeEBXML(strXML);
  22054.             var xmlGroup = EBXML_CT2384137.GetXmlDocument(strXML);
  22055.             if (!xmlGroup) {
  22056.                 EBMCServerComm_CT2384137.GroupingErrorResponse(o);
  22057.                 return false;
  22058.             }
  22059.             EBMCServerComm_CT2384137.GroupInfoResponse(xmlGroup.documentElement, bIsFromSelectFromGroupingByLocale);
  22060.         };
  22061.         //set last request time 
  22062.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckTime, Date());
  22063.         //nullify last response
  22064.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse, false);
  22065.  
  22066.         var strUrl = this.getGroupingServiceUrl() + EBMCConsts_CT2384137.GroupServiceServerUrl;
  22067.         strUrl = strUrl.replace(/CTxxxx/, EBGlobalConsts_CT2384137.ToolbarCTID);
  22068.         var lut = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastServerUpdateTime);
  22069.  
  22070.         if (lut == null)
  22071.             lut = 0;
  22072.  
  22073.         strUrl += lut;
  22074.         EBWeb_CT2384137.HTTPServerRequest(strUrl, null, false, oCallBackFunction);
  22075.     },
  22076.  
  22077.     GroupInfoResponse: function(xmlDoc, bIsFromSelectFromGroupingByLocale) {
  22078.         var strNodeValue = EBXML_CT2384137.GetXmlNodeValue(xmlDoc);
  22079.         if (strNodeValue == EBMCConsts_CT2384137.ERROR_REPLY) {
  22080.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastErrorCode, "ERROR_REPLY");
  22081.             return false;
  22082.         }
  22083.  
  22084.         var lastUpdateTime = "";
  22085.         var xmlCommunities = null;
  22086.         //update last grouping response time
  22087.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse, true);
  22088.  
  22089.         //clear last error code
  22090.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastErrorCode, "");
  22091.         for (var i = 0; i < xmlDoc.childNodes.length; i++) {
  22092.             if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.LastUpdateTime) {
  22093.                 lastUpdateTime = EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  22094.  
  22095.                 if (lastUpdateTime == EBMCConsts_CT2384137.GroupNotModified)
  22096.                     return;
  22097.             }
  22098.             else if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.Communities) {
  22099.                 xmlCommunities = xmlDoc.childNodes[i];
  22100.             }
  22101.         }
  22102.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastServerUpdateTime, lastUpdateTime);
  22103.  
  22104.         if (xmlCommunities.childNodes.length == 0)
  22105.             return false;
  22106.  
  22107.         var strFullPath = EBMCConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + EBMCConsts_CT2384137.GroupFileName;
  22108.         var oGrouping = new EBMCCommunityList_CT2384137(xmlCommunities, strFullPath);
  22109.  
  22110.         oGrouping.SaveToFile();
  22111.  
  22112.         if (bIsFromSelectFromGroupingByLocale)
  22113.             EBGroupingManager_CT2384137.onGroupingResponse(oGrouping);
  22114.         else
  22115.             EBMCManager_CT2384137.BroadcastGrouping(oGrouping);
  22116.     },
  22117.  
  22118.     GroupingErrorResponse: function(objError) {
  22119.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastErrorCode, objError.value);
  22120.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastResponseTime, Date());
  22121.         clearTimeout(this.timeoutFunc);
  22122.         this.timeoutFunc = setTimeout(function() { EBMCServerComm_CT2384137.InitGrouping(); }, EBMCConsts_CT2384137.GroupingServerOnErrorInterval * 60 * 1000);
  22123.     },
  22124.  
  22125.     //****************************************************************************
  22126.     //                                  Community Info
  22127.     //****************************************************************************
  22128.  
  22129.     GetCommunityInfoFromServer: function(strCommunityUrl, strSource) {
  22130.         var oCallBackFunction = function(strXML, o) {
  22131.             strXML = EBXML_CT2384137.LegalizeEBXML(strXML);
  22132.             var xmlCommunity = EBXML_CT2384137.GetXmlDocument(strXML);
  22133.  
  22134.             if (!xmlCommunity)
  22135.                 return false;
  22136.  
  22137.             EBMCServerComm_CT2384137.CommunityInfoResponse(xmlCommunity.documentElement, strSource);
  22138.         };
  22139.  
  22140.         var strUrl = this.getGroupingServiceUrl() + EBMCConsts_CT2384137.CommunityServiceServerUrl + strCommunityUrl;
  22141.         EBWeb_CT2384137.HTTPServerRequest(strUrl, null, false, oCallBackFunction);
  22142.     },
  22143.  
  22144.     CommunityInfoResponse: function(xmlDoc, strSource) {
  22145.         var strNodeValue = EBXML_CT2384137.GetXmlNodeValue(xmlDoc);
  22146.         if (strNodeValue == EBMCConsts_CT2384137.ERROR_REPLY)
  22147.             return false;
  22148.  
  22149.         var objCommunity = new EBMCCommunityList_CT2384137(xmlDoc)
  22150.         EBMCManager_CT2384137.ChangeToCommunity(objCommunity.CTID, objCommunity.Name, false, objCommunity, strSource, true);
  22151.     },
  22152.  
  22153.     //****************************************************************************
  22154.     //                                  Communities Changes
  22155.     //****************************************************************************
  22156.  
  22157.     IsRequestCommunitiesChanges: function() {
  22158.         var lastCheckTime = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.CommunitiesChangesLastCheckTime);
  22159.         if (lastCheckTime) {
  22160.             var milliDif = Date.parse(Date()) - Date.parse(lastCheckTime);
  22161.             if (milliDif < 1000 * 60)
  22162.                 return false;
  22163.         }
  22164.  
  22165.         return true;
  22166.     },
  22167.  
  22168.     CreateCommunitiesChangesRequestParametersString: function() {
  22169.         var strParams = EBMCConsts_CT2384137.UrlParameter_CTIDs + EBMCManager_CT2384137.AllCommunities.GetAllCTIDCommaSeparatedString();
  22170.         return strParams;
  22171.     },
  22172.  
  22173.     GetCommunitiesChangesInfoFromServer: function() {
  22174.         if (!this.IsRequestCommunitiesChanges()) {
  22175.             EBMCManager_CT2384137.UpdateMenuForStarLogic();
  22176.             return;
  22177.         }
  22178.  
  22179.         var oCallBackFunction = function(strXML, o) {
  22180.             strXML = EBXML_CT2384137.LegalizeEBXML(strXML);
  22181.             var xmlMCChanges = EBXML_CT2384137.GetXmlDocument(strXML);
  22182.  
  22183.             if (!xmlMCChanges)
  22184.                 return false;
  22185.  
  22186.             EBMCServerComm_CT2384137.CommunitiesChangesInfoResponse(xmlMCChanges.documentElement);
  22187.         };
  22188.  
  22189.         //set last request time 
  22190.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CommunitiesChangesLastCheckTime, Date());
  22191.  
  22192.         var strUrl = this.getGroupingServiceUrl() + EBMCConsts_CT2384137.CommunitiesCheckServerUrl;
  22193.         var strParams = this.CreateCommunitiesChangesRequestParametersString();
  22194.  
  22195.         if (strParams) {
  22196.             strUrl += strParams;
  22197.             EBWeb_CT2384137.HTTPServerRequest(strUrl, null, false, oCallBackFunction);
  22198.         }
  22199.     },
  22200.  
  22201.     CommunitiesChangesInfoResponse: function(xmlDoc) {
  22202.         var strNodeValue = EBXML_CT2384137.GetXmlNodeValue(xmlDoc);
  22203.         if (strNodeValue == EBMCConsts_CT2384137.ERROR_REPLY)
  22204.             return false;
  22205.  
  22206.         var GetCommunityInfo = function(xmlCommunity) {
  22207.             var objCommunity = new Object();
  22208.             var strUpdated = "";
  22209.  
  22210.             for (var i = 0; i < xmlCommunity.childNodes.length; i++) {
  22211.                 if (xmlCommunity.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.CTID)
  22212.                     objCommunity.ctid = EBXML_CT2384137.GetXmlNodeValue(xmlCommunity.childNodes[i]);
  22213.                 else if (xmlCommunity.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.VisualLastUpdateTime)
  22214.                     objCommunity.lut = EBXML_CT2384137.GetXmlNodeValue(xmlCommunity.childNodes[i]);
  22215.                 else if (xmlCommunity.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.AlertChannelId)
  22216.                     objCommunity.alertChannelId = EBXML_CT2384137.GetXmlNodeValue(xmlCommunity.childNodes[i]);
  22217.             }
  22218.  
  22219.             return objCommunity;
  22220.         };
  22221.  
  22222.         var bIsAnyChanges = false;
  22223.         var bIsAnyChangesFromLastTime = false;
  22224.         var objCommunity = null;
  22225.         var xmlCommunity = null;
  22226.         var strPrefLUT = "";
  22227.         var strPrefUpdated = "";
  22228.         var bLastState = null;
  22229.         var strLastVisualLUT = "";
  22230.         var arrChannelsId = new Array();
  22231.         //get the GROUPING node
  22232.         xmlDoc = xmlDoc.firstChild;
  22233.  
  22234.         for (var i = 0; i < xmlDoc.childNodes.length; i++) {
  22235.             objCommunity = GetCommunityInfo(xmlDoc.childNodes[i]);
  22236.  
  22237.             if (objCommunity.alertChannelId)
  22238.                 arrChannelsId.push(objCommunity.alertChannelId);
  22239.  
  22240.             strLastVisualLUT = EBCommunityPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.VusualLastUpdateTime, objCommunity.ctid);
  22241.             if (objCommunity.lut != strLastVisualLUT) {
  22242.                 bIsAnyChanges = true;
  22243.                 bLastState = EBCommunityPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.CommunityChanged, objCommunity.ctid);
  22244.  
  22245.                 if (!bLastState)
  22246.                     bIsAnyChangesFromLastTime = true;
  22247.  
  22248.                 EBCommunityPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.CommunityChanged, true, objCommunity.ctid);
  22249.             }
  22250.         }
  22251.  
  22252.         if (bIsAnyChanges)
  22253.             EBMCManager_CT2384137.UpdateMenuForStarLogic();
  22254.  
  22255.         if (bIsAnyChangesFromLastTime)
  22256.             EBMCButtonManager_CT2384137.SetMainButtonStar();
  22257.  
  22258.         EBAlertManager_CT2384137.UpdateAlertMultiple(arrChannelsId);
  22259.     },
  22260.  
  22261.     //****************************************************************************
  22262.     //                         Current Toolbar Grouping
  22263.     //****************************************************************************
  22264.  
  22265.     InitCurrentGrouping: function() {
  22266.         //do not request grouping for original toolbar, it has it's own mechanism.
  22267.         if (EBMCManager_CT2384137.IsSelectedOriginalCommunity())
  22268.             return;
  22269.  
  22270.         var iGroupingInterval = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingServerCheckInterval);
  22271.  
  22272.         if (iGroupingInterval != null && iGroupingInterval) {
  22273.             EBMCConsts_CT2384137.GroupingServerCheckInterval = iGroupingInterval;
  22274.  
  22275.             if (EBMCConsts_CT2384137.GroupingServerOnErrorInterval >= iGroupingInterval)
  22276.                 EBMCConsts_CT2384137.GroupingServerOnErrorInterval = parseInt(iGroupingInterval / 2);
  22277.         }
  22278.  
  22279.         var timeOut, IsResponded;
  22280.  
  22281.         if (this.IsRequestGrouping(true)) {
  22282.             this.GetCurrentGroupInfoFromServer();
  22283.             IsResponded = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse, true);
  22284.             IsResponded = (IsResponded == null) ? false : IsResponded;
  22285.             if (!IsResponded)
  22286.                 timeOut = this.GetDifference(!IsResponded, false, true);
  22287.             else
  22288.                 timeOut = EBMCConsts_CT2384137.GroupingServerCheckInterval * 60 * 1000;
  22289.  
  22290.         }
  22291.         else {
  22292.             IsResponded = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse, true);
  22293.             IsResponded = (IsResponded == null) ? false : IsResponded;
  22294.             timeOut = this.GetDifference(!IsResponded, true, true);
  22295.         }
  22296.  
  22297.         this.timeoutFuncCurrent = setTimeout(function() { EBMCServerComm_CT2384137.InitCurrentGrouping(false); }, timeOut);
  22298.     },
  22299.  
  22300.     GetCurrentGroupInfoFromServer: function() {
  22301.         var oCallBackFunction = function(strXML, o) {
  22302.             strXML = EBXML_CT2384137.LegalizeEBXML(strXML);
  22303.             var xmlGroup = EBXML_CT2384137.GetXmlDocument(strXML);
  22304.             if (!xmlGroup) {
  22305.                 EBMCServerComm_CT2384137.CurrentGroupingErrorResponse(o);
  22306.                 return false;
  22307.             }
  22308.  
  22309.             EBMCServerComm_CT2384137.CurrentGroupInfoResponse(xmlGroup.documentElement);
  22310.         };
  22311.  
  22312.         //set last request time 
  22313.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckTime, Date(), true);
  22314.         //nullify last response
  22315.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse, false, true);
  22316.  
  22317.         var strUrl = this.getGroupingServiceUrl() + EBMCConsts_CT2384137.GroupServiceServerUrl;
  22318.         strUrl = strUrl.replace(/CTxxxx/, EBActionManager_CT2384137.GetCTID());
  22319.         var lut = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingLastServerUpdateTime, true);
  22320.  
  22321.         if (lut == null) lut = 0;
  22322.         strUrl += lut;
  22323.  
  22324.         //get value and set false, in order to invalidate cache maximum one time.
  22325.         if (EBMCIO_CT2384137.InvalidateCacheGrouping(false))
  22326.             strUrl += EBMCConsts_CT2384137.InvalidateCacheParam;
  22327.  
  22328.         EBWeb_CT2384137.HTTPServerRequest(strUrl, null, false, oCallBackFunction);
  22329.     },
  22330.  
  22331.     CurrentGroupingErrorResponse: function(o)
  22332.     { },
  22333.  
  22334.     CurrentGroupInfoResponse: function(xmlDoc) {
  22335.         var strNodeValue = EBXML_CT2384137.GetXmlNodeValue(xmlDoc);
  22336.         if (strNodeValue == "ERROR_REPLY") {
  22337.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastErrorCode, "ERROR_REPLY", true);
  22338.             return false;
  22339.         }
  22340.  
  22341.         var lastUpdateTime = "";
  22342.         var xmlCommunities = null;
  22343.         //update last grouping response time
  22344.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastCheckResponse, true, true);
  22345.  
  22346.         //clear last error code
  22347.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastErrorCode, "", true);
  22348.         for (var i = 0; i < xmlDoc.childNodes.length; i++) {
  22349.             if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.LastUpdateTime) {
  22350.                 lastUpdateTime = EBXML_CT2384137.GetXmlNodeValue(xmlDoc.childNodes[i]);
  22351.  
  22352.                 if (lastUpdateTime == EBMCConsts_CT2384137.GroupNotModified) {
  22353.                     return;
  22354.                 }
  22355.             }
  22356.             else if (xmlDoc.childNodes[i].tagName == EBMCConsts_CT2384137.xmlTags.Communities) {
  22357.                 xmlCommunities = xmlDoc.childNodes[i];
  22358.             }
  22359.         }
  22360.  
  22361.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.GroupingLastServerUpdateTime, lastUpdateTime, true);
  22362.         if (xmlCommunities.childNodes.length == 0) {
  22363.             return false;
  22364.         }
  22365.  
  22366.         var strFullPath = ''; //EBMCConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + EBMCConsts_CT2384137.GroupFileName;
  22367.         var oGrouping = new EBMCCommunityList_CT2384137(xmlCommunities, strFullPath);
  22368.  
  22369.         EBMCManager_CT2384137.BroadcastCurrentGrouping(oGrouping);
  22370.     },
  22371.  
  22372.     //****************************************************************************
  22373.     //                              Download and Excluded Domains
  22374.     //****************************************************************************
  22375.  
  22376.     GetDownloadDomainsCheckInterval: function() {
  22377.         var iInterval = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.DownloadDomainsCheckInterval);
  22378.         if (!iInterval)
  22379.             iInterval = EBMCConsts_CT2384137.DownloadDomainsServerCheckInterval;
  22380.  
  22381.         return iInterval;
  22382.     },
  22383.  
  22384.     IsRequestDownloadDomains: function() {
  22385.         var now = Date();
  22386.         var lastCheckTime = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.DownloadDomainsListLastCheckTime);
  22387.         var lastServerUpdateTime = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.DownloadDomainsListLastServerUpdateTime);
  22388.         var milliDif = Date.parse(now) - Date.parse(lastCheckTime);
  22389.  
  22390.         //if never checked
  22391.         if (!lastCheckTime)
  22392.             return true;
  22393.  
  22394.         //if no server last update timestamp present, but checked before (in case of an error)
  22395.         //check only if error interval is passed
  22396.         if (!lastServerUpdateTime && milliDif >= EBMCConsts_CT2384137.DownloadDomainsErrorServerCheckInterval * 60 * 60 * 1000)
  22397.             return true;
  22398.  
  22399.         //normal interval passed
  22400.         if (milliDif >= this.GetDownloadDomainsCheckInterval() * 60 * 60 * 1000)
  22401.             return true;
  22402.  
  22403.         //all ok, no need to check.
  22404.         return false;
  22405.     },
  22406.  
  22407.     //Download Domains request (if needed)
  22408.     InitMC: function() {
  22409.         //no need to check
  22410.         if (!this.IsRequestDownloadDomains())
  22411.             return;
  22412.  
  22413.         //get last server update time
  22414.         var strLUT = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.DownloadDomainsListLastServerUpdateTime);
  22415.         if (!strLUT)
  22416.             strLUT = 0;
  22417.  
  22418.         //set last request time 
  22419.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.DownloadDomainsListLastCheckTime, Date());
  22420.  
  22421.         //build the request url
  22422.         var strUrl = this.getGroupingServiceUrl() + EBMCConsts_CT2384137.DownloadDomainsServerUrl;
  22423.  
  22424.         //response function
  22425.         var oCallBackFunction = function(strXML, o) {
  22426.             strXML = EBXML_CT2384137.LegalizeEBXML(strXML);
  22427.             var xmlDomains = EBXML_CT2384137.GetXmlDocument(strXML);
  22428.             if (!xmlDomains)
  22429.                 return false;
  22430.  
  22431.             EBMCServerComm_CT2384137.DownloadDomainsResponse(xmlDomains.documentElement);
  22432.         };
  22433.  
  22434.         //Execute call
  22435.         EBWeb_CT2384137.HTTPServerRequest(strUrl, null, false, oCallBackFunction);
  22436.     },
  22437.  
  22438.     DownloadDomainsResponse: function(xmlRoot) {
  22439.         var xmlDomains = null;
  22440.         var xmlExcludedDomains = null;
  22441.         var xmlLastUpdateTime = null;
  22442.         var xmlInterval = null;
  22443.         var xmlFlags = null;
  22444.         var xmlNode = null;
  22445.  
  22446.         var xmlTags = EBMCConsts_CT2384137.xmlTags;
  22447.  
  22448.         //Extract Domains and LastUpdateTime nodes
  22449.         for (var i = 0; i < xmlRoot.childNodes.length; i++) {
  22450.             xmlNode = xmlRoot.childNodes[i];
  22451.             if (xmlNode.tagName == xmlTags.DownloadDomains)
  22452.                 xmlDomains = xmlNode;
  22453.             else if (xmlNode.tagName == xmlTags.ExcludedDomains)
  22454.                 xmlExcludedDomains = xmlNode;
  22455.             else if (xmlNode.tagName == xmlTags.LastUpdateTime)
  22456.                 xmlLastUpdateTime = xmlNode;
  22457.             else if (xmlNode.tagName == xmlTags.Interval)
  22458.                 xmlInterval = xmlNode;
  22459.             else if (xmlNode.tagName == xmlTags.Flags)
  22460.                 xmlFlags = xmlNode;
  22461.         }
  22462.  
  22463.         try {
  22464.             //update check interval, set new interval into preferences
  22465.             var iInterval = EBXML_CT2384137.GetXmlNodeValue(xmlInterval);
  22466.             if (iInterval)
  22467.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.DownloadDomainsCheckInterval, iInterval);
  22468.  
  22469.             //check if NOT_MODIFIED response
  22470.             var strFlags = EBXML_CT2384137.GetXmlNodeValue(xmlFlags);
  22471.             if (strFlags == EBMCConsts_CT2384137.GroupNotModified)
  22472.                 return;
  22473.  
  22474.             //Save the last update time
  22475.             var strServerLastUpdateTime = EBXML_CT2384137.GetXmlNodeValue(xmlLastUpdateTime);
  22476.             EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.DownloadDomainsListLastServerUpdateTime, strServerLastUpdateTime);
  22477.  
  22478.             //Save the domains in file
  22479.             EBMCIO_CT2384137.SaveDownloadDomainsToFile(xmlDomains);
  22480.             EBMCIO_CT2384137.SaveExcludedDomainsToFile(xmlExcludedDomains);
  22481.  
  22482.             var arrDownloadDomains = EBMCIO_CT2384137.GetDomainArrayFromXml(xmlDomains);
  22483.             var arrExcludedDomains = EBMCIO_CT2384137.GetDomainArrayFromXml(xmlExcludedDomains);
  22484.  
  22485.             //Update the list via manager
  22486.             EBMCManager_CT2384137.UpdateDetectDomainsList(arrDownloadDomains, arrExcludedDomains);
  22487.         }
  22488.         catch (ex) { }
  22489.     },
  22490.  
  22491.     getGroupingServiceUrl: function() {
  22492.         var strUrl = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.GroupingServiceUrl);
  22493.         if (!strUrl)
  22494.             strUrl = EBMCConsts_CT2384137.BaseGroupingServiceUrl;
  22495.  
  22496.         return strUrl;
  22497.     }
  22498. };
  22499. var EBMyStuffErrorDialog_CT2384137 =
  22500. {
  22501.     dialogPath: "chrome://iobitcom/content/myStuffError.xul",
  22502.     dialogName: "EBMyStuffErrorDialogName_CT2384137",
  22503.     dialogId: "ebMyStuffError",
  22504.     divMsg: null,
  22505.     oWindow: null,
  22506.     btnOk: null,
  22507.     btnUpgrade: null,
  22508.  
  22509.     openDialog: function(flags) {
  22510.  
  22511.         window.openDialog(this.dialogPath, this.dialogName,
  22512.                         'chrome,modal,centerscreen,resizable=no',
  22513.                         flags);
  22514.     },
  22515.  
  22516.     onload: function(event) {
  22517.         this.divMsg = document.getElementById("divMsg");
  22518.         this.btnOk = document.getElementById(this.dialogId).getButton("accept");
  22519.         this.btnUpgrade = document.getElementById("btnUpgrade");
  22520.  
  22521.         this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  22522.         var flags = window.arguments[0];
  22523.         this.applyLanguagePack();
  22524.         this.initUI(flags);
  22525.     },
  22526.  
  22527.     initUI: function(flags) {
  22528.         var responsFlags = this.oWindow.oToolbar_CT2384137.toolbarDataParsing.myStuff.responseFlags;
  22529.         var tooltipHtmlText = "";
  22530.         var tooltipTitle = "";
  22531.  
  22532.         switch (flags) {
  22533.             case responsFlags.DELETED:
  22534.             case responsFlags.COMPONENT_NOT_FOUND:
  22535.                 tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_COMP_NOT_EXISTS');
  22536.                 tooltipTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TITLE_UNVAVAILABLE');
  22537.                 break;
  22538.             case responsFlags.CONNECTION_ERROR:
  22539.                 tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TEMP_UNAVAILABLE');
  22540.                 tooltipTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TITLE_TEMP_UNAVAILABLE');
  22541.                 break;
  22542.             case responsFlags.ERROR:
  22543.                 tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TECH_ERROR');
  22544.                 var contactCustomerSupportCaption = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_CUSTOMER_SUPPORT_LINK_TEXT');
  22545.                 var customerSupportLink = "<html:a onclick=\"EBMyStuffErrorDialog_CT2384137.onclickCustomerSupport(event)\" href=\"#\" class=\"EBMyStuffTooltipA_CT2384137\"> " + contactCustomerSupportCaption + "</html:a>";
  22546.                 tooltipHtmlText += customerSupportLink;
  22547.                 tooltipTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TITLE_UNVAVAILABLE');
  22548.                 break;
  22549.             case responsFlags.SERVER_UNREACHABLE:
  22550.                 tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TEMP_UNAVAILABLE');
  22551.                 tooltipTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TITLE_TEMP_UNAVAILABLE');
  22552.                 break;
  22553.             case responsFlags.INVALID_XML:
  22554.                 tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TEMP_UNAVAILABLE');
  22555.                 tooltipTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TITLE_TEMP_UNAVAILABLE');
  22556.                 break;
  22557.             case responsFlags.UNSUPPORTED:
  22558.                 //TODO: check if this toolbar is up to date.
  22559.                 tooltipTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TITLE_UPGRADE');
  22560.                 if (this.oWindow.oToolbarManager_CT2384137.isLatestVersion())
  22561.                     tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_COMP_NOT_EXISTS');
  22562.                 else {
  22563.                     tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_UPGRADE_TOOLBAR_FULL_MSG');
  22564.                     this.btnUpgrade.style.display = "";
  22565.                     this.btnOk.label = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_GLOBAL_CANCEL');
  22566.                 }
  22567.                 break;
  22568.             case responsFlags.BAD_INPUT:
  22569.                 tooltipHtmlText = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_COMP_NOT_EXISTS');
  22570.                 tooltipTitle = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_TITLE_UNVAVAILABLE');
  22571.                 break;
  22572.             default:
  22573.                 break;
  22574.         }
  22575.  
  22576.         this.divMsg.innerHTML = tooltipHtmlText;
  22577.         window.document.title = tooltipTitle;
  22578.     },
  22579.  
  22580.     onclickCustomerSupport: function(event) {
  22581.         var strUrl = this.oWindow.EBActionManager_CT2384137.GetWebServerURL("support");
  22582.         this.oWindow.EBWeb_CT2384137.LoadURLInNewTab(strUrl);
  22583.         window.close();
  22584.     },
  22585.  
  22586.     onclickUpgrade: function(event) {
  22587.         var strUrl = this.oWindow.EBActionManager_CT2384137.GetWebServerURL("upgrade");
  22588.         this.oWindow.EBWeb_CT2384137.LoadURLInNewTab(strUrl);
  22589.         window.close();
  22590.     },
  22591.  
  22592.     applyLanguagePack: function() {
  22593.         var dialogsDirection = this.oWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  22594.         if (dialogsDirection)
  22595.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, this.dialogId);
  22596.  
  22597.         this.btnOk.label = this.oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_GLOBAL_OK");
  22598.         this.btnUpgrade.label = this.oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_MYSTUFF_ERROR_TOOLTIP_UPGRADE_TOOLBAR_LINK_TEXT");
  22599.     }
  22600. };
  22601.  
  22602. function EBMyStuffManager_CT2384137() {
  22603.     var SEARCH_TERM_ALIAS = "SEARCH_TERM";
  22604.     var tooltip = null;
  22605.     var tooltipManager = null;
  22606.     var BLINK_TIMES = 5;
  22607.     
  22608.     this.onclickAdd = function(event) {
  22609.         var strUrl = oToolbarManager_CT2384137.getMyStuffSearchUrl();
  22610.         strUrl = EBActionManager_CT2384137.ConvertAliasesUrl(strUrl);
  22611.         strUrl = strUrl.replace(SEARCH_TERM_ALIAS, "");
  22612.         EBWeb_CT2384137.LoadURL(strUrl);
  22613.  
  22614.         //usage
  22615.         EBUsageMyStuff_CT2384137.AddStuffClick();
  22616.     };
  22617.  
  22618.     this.onclickOptions = function(event) {
  22619.         EBToolbarOptionsStaticDialogManager_CT2384137.OpenDialog(window, false, true);
  22620.         
  22621.         //usage
  22622.         EBUsageMyStuff_CT2384137.OptionsClick();
  22623.     };
  22624.  
  22625.     this.onTooltipHidden = function(event) { };
  22626.  
  22627.     this.getBlinkFunction = function(xulToolbarItem) {
  22628.         var blinkBGColor = oToolbarSkin_CT2384137.myStuffBlinkColor;
  22629.  
  22630.         var blinkFunction = function() {
  22631.             this.blinkStyle = "background-color: " + blinkBGColor;
  22632.             this.xulToolbarItem = xulToolbarItem;
  22633.             this.blinkCount = BLINK_TIMES;
  22634.  
  22635.             this.start = function() {
  22636.                 this.xulToolbarItem.setAttribute("style", this.blinkStyle);
  22637.                 setTimeout(this.end, 500);
  22638.             };
  22639.  
  22640.             this.end = function() {
  22641.                 this.blinkCount--;
  22642.                 this.xulToolbarItem.setAttribute("style", "");
  22643.                 if (this.blinkCount > 0)
  22644.                     setTimeout(this.start, 500);
  22645.             };
  22646.  
  22647.             this.start();
  22648.         };
  22649.  
  22650.         return blinkFunction;
  22651.     };
  22652.  
  22653.     this.onApiAddStuffResponse = function(flags, isSuccess) {
  22654.         if (!isSuccess)
  22655.             EBMyStuffErrorDialog_CT2384137.openDialog(flags);
  22656.         else {
  22657.             //set the onload event to this component, so when it's loaded, the visibility will be recalculated
  22658.             EBChevronStaticManager_CT2384137.setFirstMyStuffComponentVisible();
  22659.  
  22660.             var myStuffComponents = EBToolbarManager_CT2384137.dataToolbarObject.MyStuffComponents;
  22661.             var oComponent = myStuffComponents.GetByIndex(1);
  22662.             if (!oComponent) return;
  22663.             
  22664.             var xulToolbarItem = oComponent.GetToolbarItemContainer();
  22665.             var blinkCallback = this.getBlinkFunction(xulToolbarItem);
  22666.             var onImageLoaded = function() {
  22667.                 EBChevronStaticManager_CT2384137.setFirstMyStuffComponentVisible();
  22668.                 blinkCallback();
  22669.             };
  22670.  
  22671.             oComponent.Onload(onImageLoaded);
  22672.         }
  22673.     };
  22674. };
  22675.  
  22676. function EBBaseSectionManager_CT2384137() {
  22677.     this.xulElements = new Object();
  22678.     this.xulElements.showHideButton = null;
  22679.     this.xulElements.deleteButton = null;
  22680.     this.xulElements.btnUp = null;
  22681.     this.xulElements.btnDown = null;
  22682.     this.xulElements.listComponents = null;
  22683.     this.xulElements.listcolsComponents = null;
  22684.  
  22685.     var upArrow = "chrome://global/skin/arrow/arrow-up.gif";
  22686.     var upArrowDis = "chrome://global/skin/arrow/arrow-up-dis.gif";
  22687.     var downArrow = "chrome://global/skin/arrow/arrow-dn.gif";
  22688.     var downArrowDis = "chrome://global/skin/arrow/arrow-dn-dis.gif";
  22689.     
  22690.     this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  22691.     
  22692.     this.onload = function(event) { };
  22693.     this.onunload = function(event) { };
  22694.     this.ondialogAccept = function(event) { };
  22695.     this.applyLanguagePack = function() { };
  22696.     this.changed = false;
  22697.  
  22698.     //common list functions
  22699.     this.btnCaptionHide = "";
  22700.     this.btnCaptionShow = "";
  22701.  
  22702.     this.onClickCheckBox = function(e) {
  22703.         //implement in inherited class
  22704.     };
  22705.  
  22706.     this.onDelete = function(e) {
  22707.         var iSelectedIndex = this.xulElements.listComponents.selectedIndex;
  22708.         //select other node
  22709.  
  22710.         var offset = (this.xulElements.listComponents.getRowCount() == iSelectedIndex + 1) ?
  22711.                                 -1 : 1;
  22712.  
  22713.         if (this.xulElements.listComponents.getRowCount() > 1) {
  22714.             this.xulElements.listComponents.moveByOffset(offset, true, false);
  22715.             this.xulElements.listComponents.ensureElementIsVisible(this.xulElements.listComponents.selectedItem);
  22716.             this.listbox_onSelect();
  22717.         }
  22718.         else
  22719.             this.disableAllButtons();
  22720.  
  22721.         this.xulElements.listComponents.removeItemAt(iSelectedIndex);
  22722.     };
  22723.  
  22724.     this.getComponentXulItem = function(item, isDeletable) {
  22725.         var strDisplayText = item.DisplayText;
  22726.         var strDisplayIcon = item.DisplayIcon;
  22727.         var strCompID = item.UniqueCompID;
  22728.  
  22729.         var objListItem = document.createElement("listitem");
  22730.         var objCheckBox = document.createElement("listcell");
  22731.         var objTextImage = document.createElement("listcell");
  22732.  
  22733.         objListItem.setAttribute('allowevents', 'true');
  22734.         objListItem.setAttribute('style', 'height:20px');
  22735.  
  22736.         objCheckBox.setAttribute('isDeletable', isDeletable);
  22737.         objCheckBox.setAttribute('type', 'checkbox');
  22738.         objCheckBox.onclick = this.onClickCheckBox;
  22739.         objCheckBox.setAttribute('checked', item.isShow().toString());
  22740.         objCheckBox.setAttribute('id', strCompID);
  22741.  
  22742.         objTextImage.setAttribute('image', strDisplayIcon);
  22743.         objTextImage.setAttribute('label', strDisplayText);
  22744.         objTextImage.setAttribute('class', 'listcell-iconic');
  22745.  
  22746.         objListItem.appendChild(objCheckBox);
  22747.         objListItem.appendChild(objTextImage);
  22748.         return objListItem;
  22749.     };
  22750.  
  22751.     this.addComponents = function(itemsHash) {
  22752.         if (!itemsHash || itemsHash.Count() == 0) {
  22753.             this.disableAllButtons();
  22754.             return;
  22755.         }
  22756.         
  22757.         var item = null;
  22758.         var xulElement = null
  22759.         var isDeletable = false;
  22760.         for (var i = 0; i < itemsHash.Count(); i++) {
  22761.             item = itemsHash.GetByIndex(i);
  22762.             if (item.Permission == this.oWindow.oToolbar_CT2384137.toolbarDataParsing.Editable.FULL) {
  22763.                 //add to user components positions array
  22764.                 if (item.CompType == this.oWindow.oToolbar_CT2384137.toolbarDataParsing.ComponentType.UserAdded ||
  22765.                         item.CompType == this.oWindow.oToolbar_CT2384137.toolbarDataParsing.ComponentType.MyStuff)
  22766.                     isDeletable = true;
  22767.                 else
  22768.                     isDeletable = false;
  22769.  
  22770.                 xulElement = this.getComponentXulItem(item, isDeletable);
  22771.                 this.xulElements.listComponents.appendChild(xulElement);
  22772.             }
  22773.         }
  22774.     };
  22775.  
  22776.     this.setShowHideBtnLabel = function(checked) {
  22777.         this.xulElements.showHideButton.label = (checked) ? this.btnCaptionHide : this.btnCaptionShow;
  22778.     };
  22779.     
  22780.     this.enableDisableDeleteBtn = function(isDeletable)
  22781.     {
  22782.         if(!this.xulElements.deleteButton) return;
  22783.         
  22784.         this.xulElements.deleteButton.disabled = !isDeletable;
  22785.     };
  22786.  
  22787.     this.enableDisableMoveBtns = function() {
  22788.         var manager = this;
  22789.  
  22790.         var upBtn = function(isEnabled) {
  22791.             var image = (isEnabled) ? upArrow : upArrowDis;
  22792.             manager.xulElements.btnUp.disabled = !isEnabled;
  22793.             manager.xulElements.btnUp.image = image;
  22794.         };
  22795.  
  22796.         var dnBtn = function(isEnabled) {
  22797.             var image = (isEnabled) ? downArrow : downArrowDis;
  22798.             manager.xulElements.btnDown.disabled = !isEnabled;
  22799.             manager.xulElements.btnDown.image = image;
  22800.         };
  22801.         //no moving buttons
  22802.         if (!this.xulElements.btnDown || !this.xulElements.btnUp) return;
  22803.  
  22804.         if (!this.xulElements.listComponents.selectedItem) {
  22805.             upBtn(false);
  22806.             dnBtn(false);
  22807.             return;
  22808.         }
  22809.  
  22810.         var checkbox = this.xulElements.listComponents.selectedItem.firstChild;
  22811.         var isDeletable = parseBool(checkbox.getAttribute("isDeletable"));
  22812.  
  22813.         //item is not deletable
  22814.         if (!isDeletable) {
  22815.             upBtn(false);
  22816.             dnBtn(false);
  22817.             return;
  22818.         }
  22819.  
  22820.         var iSelectedIndex = this.xulElements.listComponents.selectedIndex;
  22821.         //check previus item
  22822.         if (iSelectedIndex == 0)
  22823.             upBtn(false);
  22824.         else {
  22825.             if (!parseBool(this.xulElements.listComponents.getItemAtIndex(iSelectedIndex - 1).firstChild.getAttribute("isDeletable")))
  22826.                 upBtn(false);
  22827.             else
  22828.                 upBtn(true);
  22829.         }
  22830.  
  22831.         //check next item
  22832.         if (iSelectedIndex + 1 == this.xulElements.listComponents.getRowCount())
  22833.             dnBtn(false);
  22834.         else {
  22835.             if (!parseBool(this.xulElements.listComponents.getItemAtIndex(iSelectedIndex + 1).firstChild.getAttribute("isDeletable")))
  22836.                 dnBtn(false);
  22837.             else
  22838.                 dnBtn(true);
  22839.         }
  22840.     };
  22841.  
  22842.     this.onMoveUp = function(e) {
  22843.         var oSelected = this.xulElements.listComponents.selectedItem;
  22844.         var oUpper = this.xulElements.listComponents.getItemAtIndex(this.xulElements.listComponents.selectedIndex-1);
  22845.         this.xulElements.listComponents.insertBefore(oSelected, oUpper);
  22846.         this.xulElements.listComponents.selectItem(oSelected);
  22847.         this.enableDisableMoveBtns();
  22848.     };
  22849.  
  22850.     this.onMoveDown = function(e) {
  22851.         var oSelected = this.xulElements.listComponents.selectedItem;
  22852.         var oLower = this.xulElements.listComponents.getItemAtIndex(this.xulElements.listComponents.selectedIndex + 1);
  22853.         this.xulElements.listComponents.insertBefore(oLower, oSelected);
  22854.         this.xulElements.listComponents.selectItem(oSelected);
  22855.         this.enableDisableMoveBtns();
  22856.     };
  22857.  
  22858.     this.listbox_onSelect = function(e) {
  22859.         if (!this.xulElements.listComponents.selectedItem) return;
  22860.         var checkbox = this.xulElements.listComponents.selectedItem.firstChild;
  22861.         var isChecked = parseBool(checkbox.getAttribute("checked"));
  22862.         this.setShowHideBtnLabel(isChecked);
  22863.         var isDeletable = parseBool(checkbox.getAttribute("isDeletable"));
  22864.         this.enableDisableDeleteBtn(isDeletable);
  22865.         this.enableDisableMoveBtns(isDeletable);
  22866.     };
  22867.  
  22868.     this.listbox_onKeyPress = function(e) {
  22869.         //delete
  22870.         if (e.keyCode == 46 && !this.xulElements.deleteButton.disabled)
  22871.             this.onDelete();
  22872.  
  22873.         //space
  22874.         else if (e.charCode == e.DOM_VK_SPACE) {
  22875.             var event = new Object();
  22876.             event.target = this.xulElements.listComponents.selectedItem.firstChild;
  22877.             this.onClickCheckBox(event);
  22878.         }
  22879.     };
  22880.  
  22881.     this.disableAllButtons = function(e) {
  22882.         this.xulElements.deleteButton.disabled = true;
  22883.         this.xulElements.showHideButton.disabled = true;
  22884.         this.enableDisableMoveBtns();
  22885.     };
  22886.  
  22887.     this.onShowHide = function(e) {
  22888.         var selectedItem = this.xulElements.listComponents.selectedItem;
  22889.         var isChecked = parseBool(selectedItem.firstChild.getAttribute("checked"));
  22890.         selectedItem.firstChild.setAttribute("checked", (!isChecked).toString());
  22891.         this.setShowHideBtnLabel(!isChecked);
  22892.     };
  22893. };
  22894.  
  22895. function EBToolbarOptions_MyStuffComponents_CT2384137(isFromMyStuff) {
  22896.     this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  22897.  
  22898.     this.xulElements = new Object();
  22899.     this.xulElements.tabMyStuffComponents = document.getElementById("tabMyStuffComponents");
  22900.     this.xulElements.tpMyStuffComponents = document.getElementById("tpMyStuffComponents");
  22901.     this.xulElements.lblMyStuffComponents = document.getElementById("lblMyStuffComponents");
  22902.     this.xulElements.dscMyStuffComponents = document.getElementById("dscMyStuffComponents");
  22903.     this.xulElements.listComponents = document.getElementById("listMyStuffComponents");
  22904.     this.xulElements.listcolsComponents = document.getElementById("listcolsMyStuffComponents");
  22905.     this.xulElements.showHideButton = document.getElementById("showHideButtonMyStuff");
  22906.     this.xulElements.deleteButton = document.getElementById("deleteButtonMyStuff");
  22907.     this.xulElements.btnUp = document.getElementById("btnUpMyStuff");
  22908.     this.xulElements.btnDown = document.getElementById("btnDownMyStuff");
  22909.     this.myStuffChanged = false;
  22910.  
  22911.     var disabled = false;
  22912.     var manager = this;
  22913.     this.onClickCheckBox = function(e) {
  22914.         var isChecked = parseBool(e.target.getAttribute("checked"));
  22915.         manager.setShowHideBtnLabel(!isChecked);
  22916.         e.target.setAttribute("checked", (!isChecked).toString());
  22917.     };
  22918.  
  22919.     this.onload = function() {
  22920.         var myStuffItemsHash = this.oWindow.oToolbarManager_CT2384137.getToolbarData().myStuffItemsHash;
  22921.         if (!this.oWindow.oToolbarManager_CT2384137.myStuffEnabled()) {
  22922.             disabled = true;
  22923.             this.xulElements.tpMyStuffComponents.style.visibility = "hidden";
  22924.             this.xulElements.tabMyStuffComponents.style.display = "none";
  22925.             return;
  22926.         }
  22927.  
  22928.         this.addComponents(myStuffItemsHash);
  22929.  
  22930.         if (isFromMyStuff)
  22931.             this.xulElements.tabMyStuffComponents.click();
  22932.  
  22933.         if (!myStuffItemsHash || myStuffItemsHash.Count() <= 1)
  22934.             this.disableAllButtons();
  22935.     };
  22936.  
  22937.     this.onunload = function() { };
  22938.  
  22939.     this.isMyStuffPositionChanged = function(positionsHash) {
  22940.         var myStuffItemsHash = this.oWindow.oToolbarManager_CT2384137.getToolbarData().myStuffItemsHash;
  22941.         if (positionsHash.Count() != myStuffItemsHash.Count()) return true;
  22942.  
  22943.         for (var i = 0; i < positionsHash.Count(); i++) {
  22944.             if (positionsHash.GetByIndex(i) != myStuffItemsHash.GetByIndex(i).UniqueCompID)
  22945.                 return true;
  22946.         }
  22947.  
  22948.         return false;
  22949.     };
  22950.  
  22951.     this.acceptUserComponents = function() {
  22952.         var checkBox = null;
  22953.         var item = null;
  22954.         var positionsHash = new EBArrayHashObject_CT2384137();
  22955.         for (var i = 0; i < this.xulElements.listComponents.getRowCount(); i++) {
  22956.             checkBox = this.xulElements.listComponents.getItemAtIndex(i).firstChild;
  22957.             item = this.oWindow.oToolbarManager_CT2384137.getToolbarData().myStuffItemsHash.GetByID(checkBox.id);
  22958.             positionsHash.Add(checkBox.id, checkBox.id);
  22959.             if (item.isShow() != parseBool(checkBox.getAttribute("checked"))) {
  22960.                 this.myStuffChanged = true;
  22961.                 item.setShowState(!item.isShow());
  22962.             }
  22963.         }
  22964.  
  22965.         if (this.isMyStuffPositionChanged(positionsHash)) {
  22966.             this.oWindow.oToolbarManager_CT2384137.updateMyStuffComponents(positionsHash);
  22967.             this.myStuffChanged = true;
  22968.         }
  22969.     };
  22970.  
  22971.     this.ondialogAccept = function() {
  22972.         if (!disabled)
  22973.             this.acceptUserComponents();
  22974.     };
  22975.  
  22976.     this.applyLanguagePack = function() {
  22977.         this.xulElements.tabMyStuffComponents.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_MY_STUFF_TAB_TITLE'));
  22978.         this.xulElements.lblMyStuffComponents.value = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_MY_STUFF_TAB_TITLE');
  22979.         this.xulElements.dscMyStuffComponents.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_MY_STUFF_TAB_DESCRIPTION').replace(/\\n/g, "<html:br />");
  22980.         this.xulElements.deleteButton.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_DELETE_COMPONENT_BUTTON'));
  22981.         this.btnCaptionHide = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_HIDE_COMPONENT_BUTTON');
  22982.         this.btnCaptionShow = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_SHOW_COMPONENT_BUTTON');
  22983.  
  22984.         this.xulElements.listComponents.selectedIndex = 0;
  22985.     };
  22986. };
  22987.  
  22988. EBToolbarOptions_MyStuffComponents_CT2384137.prototype = new EBBaseSectionManager_CT2384137();
  22989. var EBToolbarOptionsPreferenceConsts_CT2384137 =
  22990. {
  22991.     PrefPrefix: 'components'
  22992. }
  22993.  
  22994. var EBToolbarOptionsDialogConsts_CT2384137 =
  22995. {
  22996.     FileName: 'options.xul',
  22997.     DialogName: 'optionsDialogName_CT2384137',
  22998.     DialogType: 'EBOptionsDialog_CT2384137',
  22999.     EditableCheckBoxPrefixID: 'checkBoxEditableComponent',
  23000.     EditableCheckBoxAttributeCompID: 'EB_EDITABLE_CHECK_BOX_COMP_ID',
  23001.     PersonalComponentsTabIndex: 0,
  23002.     PredefinedComponentsTabIndex: 1,
  23003.     ThirdPartyComponentsTabIndex: 2,
  23004.     AreYouSureConfirm: 'Are you sure?'
  23005. }
  23006. function EBToolbarOptionsDialogManager_CT2384137() {
  23007.     var dialogId = "ebOptionsDialog";
  23008.     this.xulElements = new Object();
  23009.     this.xulElements.okBtn = document.getElementById(dialogId).getButton("accept");
  23010.     this.xulElements.cancelBtn = document.getElementById(dialogId).getButton("cancel");
  23011.  
  23012.     var isFromEmailNotifier = (window.arguments) ? window.arguments[0] : false;
  23013.     var isFromMyStuff = (window.arguments) ? window.arguments[1] : false;
  23014.     
  23015.     this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  23016.     this.managers = new Array();
  23017.  
  23018.     this.personalComponentsDialogManager = new EBToolbarOptions_PersonalComponents_CT2384137(isFromEmailNotifier);
  23019.     this.managers.push(this.personalComponentsDialogManager);
  23020.  
  23021.     this.settingsDialogManager = new EBToolbarOptions_Settings_CT2384137();
  23022.     this.managers.push(this.settingsDialogManager);
  23023.  
  23024.     this.predefinedComponentsDialogManager = new EBToolbarOptions_PredefinedComponents_CT2384137();
  23025.     this.managers.push(this.predefinedComponentsDialogManager);
  23026.  
  23027.     this.MyStuffComponentsDialogManager = new EBToolbarOptions_MyStuffComponents_CT2384137(isFromMyStuff);
  23028.     this.managers.push(this.MyStuffComponentsDialogManager);
  23029.  
  23030.     this.thirdPartyComponentsDialogManager = new EBToolbarOptions_ThirdPartyComponents_CT2384137();
  23031.     this.managers.push(this.thirdPartyComponentsDialogManager);
  23032.  
  23033.  
  23034.     this.onload = function(event) {
  23035.         for (var i = 0; i < this.managers.length; this.managers[i].onload(), i++);
  23036.  
  23037.         this.applyLanguagePack();
  23038.     };
  23039.  
  23040.     this.onunload = function(event) {
  23041.         for (var i = 0; i < this.managers.length; this.managers[i].onunload(), i++);
  23042.     };
  23043.  
  23044.     this.broadcastChange = function(isMyStuff) {
  23045.         var data = (isMyStuff) ?
  23046.                 this.oWindow.oToolbar_CT2384137.toolbarDataParsing.observerData.myStuff :
  23047.                 this.oWindow.oToolbar_CT2384137.toolbarDataParsing.observerData.settings;
  23048.  
  23049.         this.oWindow.EBToolbarManager_CT2384137.broadcastRebuild(data);
  23050.     };
  23051.  
  23052.     this.ondialogAccept = function() {
  23053.         var i;
  23054.         for (i = 0; i < this.managers.length; this.managers[i].ondialogAccept(), i++);
  23055.         var isChanged = false;
  23056.  
  23057.         for (i = 0; i < this.managers.length; isChanged |= this.managers[i].changed, i++);
  23058.  
  23059.         if (isChanged)
  23060.             this.broadcastChange(false);
  23061.  
  23062.         if (this.MyStuffComponentsDialogManager.myStuffChanged)
  23063.             this.broadcastChange(true);
  23064.     };
  23065.  
  23066.     this.applyLanguagePack = function() {
  23067.         var dialogsDirection = this.oWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  23068.         if (dialogsDirection)
  23069.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "ebOptionsDialog");
  23070.  
  23071.         this.xulElements.okBtn.label = this.oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_GLOBAL_OK");
  23072.         this.xulElements.cancelBtn.label = this.oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_GLOBAL_CANCEL");
  23073.  
  23074.         for (var i = 0; i < this.managers.length; this.managers[i].applyLanguagePack(), i++);
  23075.     };
  23076. };
  23077. var EBToolbarOptionsStaticDialogManager_CT2384137 = {
  23078.     OpenDialog: function(objParentWindow, isFromEMailNotifier, isFromMyStuff) {
  23079.         //check if the dialog exsits to focus on it
  23080.         var oOptionsDialog = this.GetDialog();
  23081.         if (oOptionsDialog)
  23082.             oOptionsDialog.focus();
  23083.         else {
  23084.             var strChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + EBToolbarOptionsDialogConsts_CT2384137.FileName;
  23085.             objParentWindow.openDialog(strChromePath,
  23086.                                         EBToolbarOptionsDialogConsts_CT2384137.DialogName,
  23087.                                         'modal,centerscreen,chrome,resizable=no',
  23088.                                         isFromEMailNotifier, isFromMyStuff);
  23089.         }
  23090.     },
  23091.  
  23092.     GetDialog: function() {
  23093.         var strOptionsDialogType = EBToolbarOptionsDialogConsts_CT2384137.DialogType;
  23094.         var strOptionsDialogName = EBToolbarOptionsDialogConsts_CT2384137.DialogName;
  23095.  
  23096.         var oOptionsDialog = EBGlobalManager_CT2384137.GetXULWindowByTypeAndName(strOptionsDialogType, strOptionsDialogName);
  23097.  
  23098.         return oOptionsDialog;
  23099.     }
  23100. };
  23101. /// <reference path="BaseSectionManager.js" />
  23102. function EBToolbarOptions_PersonalComponents_CT2384137(isFromEmailNotifier) {
  23103.     
  23104.     this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  23105.     
  23106.     this.xulElements = new Object();
  23107.     this.xulElements.tabPersonalComponents = document.getElementById("tabPersonalComponents");
  23108.     this.xulElements.tpPersonalComponents = document.getElementById("tpPersonalComponents");
  23109.     this.xulElements.lblPersonalComponents = document.getElementById("lblPersonalComponents");
  23110.     this.xulElements.dscPersonalComponents = document.getElementById("dscPersonalComponents");
  23111.     this.xulElements.rowEmail = document.getElementById("rowEmail");
  23112.     this.xulElements.checkEMailNotifier = document.getElementById("checkEMailNotifier");
  23113.     this.xulElements.dscEmailNotifier = document.getElementById("dscEmailNotifier");
  23114.     this.xulElements.btnEMailNotifier = document.getElementById("btnEMailNotifier");
  23115.     this.xulElements.rowPrivacy = document.getElementById("rowPrivacy");
  23116.     this.xulElements.checkPrivacy = document.getElementById("checkPrivacy");
  23117.     this.xulElements.dscPrivacy = document.getElementById("dscPrivacy");
  23118.     this.xulElements.rowWeather = document.getElementById("rowWeather");
  23119.     this.xulElements.checkWeather = document.getElementById("checkWeather");
  23120.     this.xulElements.dscWeather = document.getElementById("dscWeather");
  23121.     this.xulElements.rowRadio = document.getElementById("rowRadio");
  23122.     this.xulElements.checkRadio = document.getElementById("checkRadio");
  23123.     this.xulElements.dscRadio = document.getElementById("dscRadio");
  23124.     this.xulElements.rowFacebook = document.getElementById("rowFacebook");
  23125.     this.xulElements.checkFacebook = document.getElementById("checkFacebook");
  23126.     this.xulElements.dscFacebook = document.getElementById("dscFacebook");
  23127.     this.xulElements.btnFacebook = document.getElementById("btnFacebook");
  23128.     this.xulElements.rowAlertSettings = document.getElementById("rowAlertSettings");
  23129.     this.xulElements.btnAlertSettings = document.getElementById("btnAlertSettings");
  23130.     this.xulElements.dscAlertSettings = document.getElementById("dscAlertSettings");
  23131.  
  23132.     var oEMailNotifierItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getEmailNotifierItem();
  23133.     var oPrivacyItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getPrivacyItem();
  23134.     var oWeatherItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getWeatherItem();
  23135.     var oRadioItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getRadioItem();
  23136.     var oFacebookItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getFacebookItem();
  23137.     var that = this;
  23138.     var emailNotifierCheckedEvent = function() {
  23139.         that.xulElements.btnEMailNotifier.setAttribute("disabled", !that.xulElements.checkEMailNotifier.checked);
  23140.     };
  23141.  
  23142.     var facebookCheckedEvent = function() {
  23143.         that.xulElements.btnFacebook.disabled = !that.xulElements.checkFacebook.checked;
  23144.     };
  23145.  
  23146.     this.onload = function() {
  23147.         if (oEMailNotifierItem && oEMailNotifierItem.isAvailable()) {
  23148.             this.xulElements.checkEMailNotifier.checked = oEMailNotifierItem.isShow();
  23149.             this.xulElements.checkEMailNotifier.setAttribute("src", oEMailNotifierItem.DisplayIcon);
  23150.  
  23151.             this.xulElements.btnEMailNotifier.disabled = !oEMailNotifierItem.isShow();
  23152.             this.xulElements.checkEMailNotifier.addEventListener("click", emailNotifierCheckedEvent, false);
  23153.         }
  23154.         else
  23155.             this.xulElements.rowEmail.style.display = "none";
  23156.  
  23157.         if (oPrivacyItem && oPrivacyItem.isAvailable()) {
  23158.             this.xulElements.checkPrivacy.checked = oPrivacyItem.isShow();
  23159.             this.xulElements.checkPrivacy.setAttribute("src", oPrivacyItem.DisplayIcon);
  23160.         }
  23161.         else
  23162.             this.xulElements.rowPrivacy.style.display = "none";
  23163.  
  23164.         if (oWeatherItem && oWeatherItem.isAvailable()) {
  23165.             this.xulElements.checkWeather.checked = oWeatherItem.isShow();
  23166.             this.xulElements.checkWeather.setAttribute("src", oWeatherItem.DisplayIcon);
  23167.         }
  23168.         else
  23169.             this.xulElements.rowWeather.style.display = "none";
  23170.  
  23171.         if (oRadioItem && oRadioItem.isAvailable() && EBGlobalManager_CT2384137.IsWindowsPlatform()) {
  23172.             this.xulElements.checkRadio.checked = oRadioItem.isShow();
  23173.             this.xulElements.checkRadio.setAttribute("src", oRadioItem.DisplayIcon);
  23174.         }
  23175.         else
  23176.             this.xulElements.rowRadio.style.display = "none";
  23177.  
  23178.         if (oFacebookItem && oFacebookItem.isAvailable()) {
  23179.             this.xulElements.checkFacebook.checked = oFacebookItem.isShow();
  23180.             this.xulElements.checkFacebook.setAttribute("src", oFacebookItem.DisplayIcon);
  23181.  
  23182.             this.xulElements.btnFacebook.disabled = !oFacebookItem.isShow();
  23183.             this.xulElements.checkFacebook.addEventListener("click", facebookCheckedEvent, false);
  23184.         }
  23185.         else
  23186.             this.xulElements.rowFacebook.style.display = "none";
  23187.     };
  23188.  
  23189.     this.onunload = function() {
  23190.         this.xulElements.checkEMailNotifier.removeEventListener("click", emailNotifierCheckedEvent, false);
  23191.     };
  23192.  
  23193.     this.ondialogAccept = function() {
  23194.         if (oEMailNotifierItem && oEMailNotifierItem.isAvailable()) {
  23195.             if (oEMailNotifierItem.isShow() != this.xulElements.checkEMailNotifier.checked) {
  23196.                 oEMailNotifierItem.setShowState(this.xulElements.checkEMailNotifier.checked);
  23197.                 this.changed = true;
  23198.             }
  23199.         }
  23200.  
  23201.         if (oPrivacyItem && oPrivacyItem.isAvailable()) {
  23202.             if (oPrivacyItem.isShow() != this.xulElements.checkPrivacy.checked) {
  23203.                 oPrivacyItem.setShowState(this.xulElements.checkPrivacy.checked);
  23204.                 this.changed = true;
  23205.             }
  23206.         }
  23207.  
  23208.         if (oWeatherItem && oWeatherItem.isAvailable()) {
  23209.             if (oWeatherItem.isShow() != this.xulElements.checkWeather.checked) {
  23210.                 oWeatherItem.setShowState(this.xulElements.checkWeather.checked);
  23211.                 this.changed = true;
  23212.             }
  23213.         }
  23214.  
  23215.         if (oRadioItem && oRadioItem.isAvailable() && EBGlobalManager_CT2384137.IsWindowsPlatform()) {
  23216.             if (oRadioItem.isShow() != this.xulElements.checkRadio.checked) {
  23217.                 oRadioItem.setShowState(this.xulElements.checkRadio.checked);
  23218.                 this.changed = true;
  23219.             }
  23220.         }
  23221.  
  23222.         if (oFacebookItem && oFacebookItem.isAvailable()) {
  23223.             if (oFacebookItem.isShow() != this.xulElements.checkFacebook.checked) {
  23224.                 oFacebookItem.setShowState(this.xulElements.checkFacebook.checked);
  23225.                 this.changed = true;
  23226.             }
  23227.         }
  23228.     };
  23229.  
  23230.     this.applyLanguagePack = function() {
  23231.         this.xulElements.tabPersonalComponents.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PERSONAL_COMPONENTS_TAB_TITLE'));
  23232.         this.xulElements.lblPersonalComponents.value = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PERSONAL_COMPONENTS_TAB_TITLE');
  23233.         this.xulElements.dscPersonalComponents.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PERSONAL_COMPONENTS_TAB_DESCRIPTION').replace(/\n/g, "<html:br />");
  23234.         this.xulElements.checkEMailNotifier.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_EMAIL_NOTIFIER_COMP_TITLE'));
  23235.         this.xulElements.btnEMailNotifier.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_EMAIL_NOTIFIER_SETTINGS_BUTTON'));
  23236.         this.xulElements.dscEmailNotifier.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_EMAIL_NOTIFIER_COMP_DESCRIPTION');
  23237.         this.xulElements.dscPrivacy.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PRIVACY_COMP_DESCRIPTION');
  23238.         this.xulElements.dscWeather.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_WEATHER_COMP_DESCRIPTION');
  23239.         this.xulElements.dscRadio.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_RADIO_COMP_DESCRIPTION');
  23240.         this.xulElements.checkPrivacy.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PRIVACY_COMP_TITLE'));
  23241.         this.xulElements.checkWeather.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_WEATHER_COMP_TITLE'));
  23242.         this.xulElements.checkRadio.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_RADIO_COMP_TITLE'));
  23243.         this.xulElements.btnAlertSettings.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ALERT_SETTINGS_BUTTON'));
  23244.         this.xulElements.dscAlertSettings.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ALERT_SETTINGS_DESCRIPTION');
  23245.         this.xulElements.checkFacebook.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_FACEBOOK_COMP_TITLE'));
  23246.         this.xulElements.dscFacebook.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_FACEBOOK_COMP_DESCRIPTION');
  23247.         this.xulElements.btnFacebook.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_FACEBOOK_SETTINGS_BUTTON'));
  23248.     };
  23249.  
  23250.     this.onCommandEMailNotifier = function(event) {
  23251.         this.oWindow.EBEMailNotifierDialogsManager_CT2384137.OpenSettingsDialog(window, true, "");
  23252.     };
  23253.  
  23254.     this.onCommandFacebook = function(event) {
  23255.         //if the facebook component is not initialized, init it, because otherwise facebook manager has no data
  23256.         var fbManager = this.oWindow.oToolbar_CT2384137.facebook.manager;
  23257.         if (!this.oWindow.EBComponentsManager_CT2384137.GetFacebookComponent()) {
  23258.             var fbItem = this.oWindow.oToolbarManager_CT2384137.getToolbarData().getFacebookItem();
  23259.             if (!fbItem) return;
  23260.             fbManager.register(fbItem,
  23261.                 this.oWindow.oToolbarManager_CT2384137.getToolbarData().languagePack,
  23262.                 this.oWindow.EBActionManager_CT2384137.GetToolbarName());
  23263.         }
  23264.  
  23265.         fbManager.alertsManager.openSettingsDialog(window);
  23266.     };
  23267.  
  23268.     this.onCommandAlertSettings = function(event) {
  23269.         this.oWindow.EBAlertManager_CT2384137.OpenSettingsDialog(window);
  23270.     };
  23271. };
  23272.  
  23273. EBToolbarOptions_PersonalComponents_CT2384137.prototype = new EBBaseSectionManager_CT2384137();
  23274. function EBToolbarOptions_PredefinedComponents_CT2384137() {
  23275.     this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  23276.  
  23277.     this.xulElements = new Object();
  23278.     this.xulElements.tabPredefinedComponents = document.getElementById("tabPredefinedComponents");
  23279.     this.xulElements.tpPredefinedComponents = document.getElementById("tpPredefinedComponents");
  23280.     this.xulElements.lblPredefinedComponents = document.getElementById("lblPredefinedComponents");
  23281.     this.xulElements.dscPredefinedComponents = document.getElementById("dscPredefinedComponents");
  23282.     this.xulElements.listComponents = document.getElementById("listPredefinedComponents");
  23283.     this.xulElements.listcolsComponents = document.getElementById("listcolsPredefinedComponents");
  23284.     this.xulElements.showHideButton = document.getElementById("showHideButton");
  23285.     this.xulElements.deleteButton = document.getElementById("deleteButton");
  23286.     this.xulElements.btnUp = document.getElementById("btnUp");
  23287.     this.xulElements.btnDown = document.getElementById("btnDown");
  23288.  
  23289.     var firstUserComponentIndex = 0;
  23290.     
  23291.     var manager = this;
  23292.     this.onClickCheckBox = function(e) {
  23293.         var isChecked = parseBool(e.target.getAttribute("checked"));
  23294.         manager.setShowHideBtnLabel(!isChecked);
  23295.         e.target.setAttribute("checked", (!isChecked).toString());
  23296.     };
  23297.  
  23298.     this.onload = function() {
  23299.         this.addComponents(this.oWindow.oToolbarManager_CT2384137.getToolbarData().publisherItemsHash);
  23300.         var userItemsHash = this.oWindow.oToolbarManager_CT2384137.getToolbarData().userItemsHash;
  23301.         if (userItemsHash && userItemsHash.Count() > 0) {
  23302.             firstUserComponentIndex = this.xulElements.listComponents.getRowCount();
  23303.             this.addComponents(this.oWindow.oToolbarManager_CT2384137.getToolbarData().userItemsHash);
  23304.         }
  23305.     };
  23306.     
  23307.     this.onunload = function() { };
  23308.  
  23309.     this.isUserPositionChanged = function(arrNewPositions) {
  23310.         var usersHash = this.oWindow.oToolbarManager_CT2384137.getToolbarData().userItemsHash;
  23311.         if (arrNewPositions.length != usersHash.Count()) return true;
  23312.  
  23313.         for (var i = 0; i < arrNewPositions.length; i++) {
  23314.             if (arrNewPositions[i] != usersHash.GetByIndex(i).UniqueCompID)
  23315.                 return true;
  23316.         }
  23317.  
  23318.         return false;
  23319.     };
  23320.     
  23321.     this.acceptPredefinedComponents = function() {
  23322.         var endIndex = (firstUserComponentIndex) ? firstUserComponentIndex : this.xulElements.listComponents.getRowCount();
  23323.         var checkBox = null;
  23324.         var item = null;
  23325.         for (var i = 0; i < endIndex; i++) {
  23326.             checkBox = this.xulElements.listComponents.getItemAtIndex(i).firstChild;
  23327.             item = this.oWindow.oToolbarManager_CT2384137.getToolbarData().publisherItemsHash.GetByID(checkBox.id);
  23328.             if (item.isShow() != parseBool(checkBox.getAttribute("checked"))) {
  23329.                 this.changed = true;
  23330.                 item.setShowState(!item.isShow());
  23331.             }
  23332.         }
  23333.     };
  23334.  
  23335.     this.acceptUserComponents = function() {
  23336.         var checkBox = null;
  23337.         var item = null;
  23338.         var positionArr = new Array();
  23339.         for (var i = firstUserComponentIndex; i < this.xulElements.listComponents.getRowCount(); i++) {
  23340.             checkBox = this.xulElements.listComponents.getItemAtIndex(i).firstChild;
  23341.             item = this.oWindow.oToolbarManager_CT2384137.getToolbarData().userItemsHash.GetByID(checkBox.id);
  23342.             positionArr.push(checkBox.id);
  23343.             if (item.isShow() != parseBool(checkBox.getAttribute("checked"))) {
  23344.                 this.changed = true;
  23345.                 item.setShowState(!item.isShow());
  23346.             }
  23347.         }
  23348.  
  23349.         if (this.isUserPositionChanged(positionArr)) {
  23350.             this.oWindow.EBUserComponentsManager_CT2384137.RepositionComponents(positionArr);
  23351.             this.changed = true;
  23352.         }
  23353.     };
  23354.  
  23355.     this.ondialogAccept = function() {
  23356.         this.acceptPredefinedComponents();
  23357.         if (firstUserComponentIndex != 0)
  23358.             this.acceptUserComponents();
  23359.     };
  23360.  
  23361.     this.applyLanguagePack = function() {
  23362.         this.xulElements.tabPredefinedComponents.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PREDEFINED_COMPONENTS_TAB_TITLE'));
  23363.         this.xulElements.lblPredefinedComponents.value = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PREDEFINED_COMPONENTS_TAB_TITLE');
  23364.         this.xulElements.dscPredefinedComponents.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_PREDEFINED_COMPONENTS_TAB_DESCRIPTION').replace(/\n/g, "<html:br />");
  23365.         this.xulElements.deleteButton.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_DELETE_COMPONENT_BUTTON'));
  23366.         this.btnCaptionHide = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_HIDE_COMPONENT_BUTTON');
  23367.         this.btnCaptionShow = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_SHOW_COMPONENT_BUTTON');
  23368.  
  23369.         this.xulElements.listComponents.selectedIndex = 0;
  23370.     };
  23371. };
  23372.  
  23373. EBToolbarOptions_PredefinedComponents_CT2384137.prototype = new EBBaseSectionManager_CT2384137();
  23374. function EBToolbarOptions_Settings_CT2384137() {
  23375.     this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  23376.  
  23377.     this.xulElements = new Object();
  23378.     this.xulElements.tabAdditionalSettings = document.getElementById("tabAdditionalSettings");
  23379.     this.xulElements.tpAdditionalSettings = document.getElementById("tpAdditionalSettings");
  23380.     this.xulElements.lblAdditionalSettings = document.getElementById("lblAdditionalSettings");
  23381.     this.xulElements.dscAdditionalSettings = document.getElementById("dscAdditionalSettings");
  23382.     this.xulElements.checkEnableHistory = document.getElementById("checkEnableHistory");
  23383.     this.xulElements.checkEnableSuggest = document.getElementById("checkEnableSuggest");
  23384.     this.xulElements.btnClearHistory = document.getElementById("btnClearHistory");
  23385.     this.xulElements.checkEnableUsage = document.getElementById("checkEnableUsage");
  23386.     this.xulElements.checkEnableClickToSearchBox = document.getElementById("checkEnableClickToSearchBox");
  23387.     this.xulElements.checkEnableSearchBackToDefault = document.getElementById("checkEnableSearchBackToDefault");
  23388.     this.xulElements.checkDontShowMCDetectedPopup = document.getElementById("checkDontShowMCDetectedPopup");
  23389.     this.xulElements.checkFixPageNotFoundError = document.getElementById("checkFixPageNotFoundError");
  23390.     this.xulElements.checkSearchFromAddress = document.getElementById("checkSearchFromAddress");
  23391.     this.xulElements.checkSearchInNewTab = document.getElementById("checkSearchInNewTab");
  23392.     
  23393.     var bHistoryValue = null;
  23394.     var bSuggestValue = null;
  23395.     var bEnableUsageValue = null;
  23396.     var bEnableClickToSearchBox = null;
  23397.     var bEnableSearchBackToDefault = null;
  23398.     var bDontShowMCPopup = null;
  23399.     var bFixPageNotFoundErrors = null;
  23400.     var bEnableSearchFromAddress = null;
  23401.     var bEnableSearchInNewTab = null;
  23402.     var newTabManager = null;
  23403.  
  23404.     var manager = this;
  23405.     var enebleHistoryEvent = function() {
  23406.         manager.xulElements.checkEnableSuggest.disabled = !manager.xulElements.checkEnableHistory.checked;
  23407.     };
  23408.  
  23409.     this.changeSearchSuggestState = function(bIsEnable) {
  23410.         EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.EnableSearchSuggest, bIsEnable);
  23411.  
  23412.         //notify observers
  23413.         var aSubject = new Object();
  23414.         aSubject.wrappedJSObject = aSubject;
  23415.         aSubject.originalCTID = EBGlobalConsts_CT2384137.ToolbarCTID;
  23416.         aSubject.isEnabled = bIsEnable;
  23417.         EBObserversManager_CT2384137.NotifyCustomObserver(aSubject,
  23418.                                                             EBSearchBoxConsts_CT2384137.observerTopic,
  23419.                                                             EBSearchBoxConsts_CT2384137.observerData.searchBoxHistory);
  23420.     };
  23421.  
  23422.     this.clearAllSearchHistory = function(bIsConfirm) {
  23423.         if (!bIsConfirm || EBGlobalManager_CT2384137.Confirm(window,
  23424.                                         this.oWindow.EBActionManager_CT2384137.GetToolbarName(), 
  23425.                                         this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_CONFIRM_CLEAR_HISTORY')))
  23426.             //clear both history and suggest files
  23427.             this.oWindow.EBSpecialCommands_CT2384137.DELETE_SEARCH_HISTORY();
  23428.     };
  23429.  
  23430.     this.onload = function(event) {
  23431.         bHistoryValue = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.EnableSearchHistory);
  23432.         bSuggestValue = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.EnableSearchSuggest);
  23433.         bEnableUsageValue = this.oWindow.EBUsageManager_CT2384137.enabled;
  23434.         bEnableClickToSearchBox = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.EnableClickToSearchBox);
  23435.         var oSearchComponent = this.oWindow.EBComponentsManager_CT2384137.GetSearchBoxComponent();
  23436.         bEnableSearchBackToDefault = (oSearchComponent) ? oSearchComponent.backToDefault() : false;
  23437.         bDontShowMCPopup = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipShow);
  23438.         bFixPageNotFoundErrors = EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.FixPageNotFoundErrors);
  23439.         bEnableSearchFromAddress = EBSearchFromAddressBar_CT2384137.isEnabled();
  23440.         newTabManager = this.oWindow.oToolbar_CT2384137.searchInNewTab.getManager(EBGlobalConsts_CT2384137.ToolbarCTID);
  23441.         bEnableSearchInNewTab = (newTabManager && newTabManager.userEnabled) ? true : false;
  23442.  
  23443.         if (bHistoryValue == null) bHistoryValue = true;
  23444.         if (bSuggestValue == null) bSuggestValue = true;
  23445.         if (bEnableUsageValue == null) bEnableUsageValue = true;
  23446.         if (bEnableClickToSearchBox == null) bEnableClickToSearchBox = true;
  23447.         if (bEnableSearchBackToDefault == null) bEnableSearchBackToDefault = true;
  23448.         if (bDontShowMCPopup == null) bDontShowMCPopup = true;
  23449.         if (bFixPageNotFoundErrors == null) bFixPageNotFoundErrors = EBGlobalConsts_CT2384137.FixPageNotFoundErrorsChecked;
  23450.  
  23451.         this.xulElements.checkEnableHistory.checked = bHistoryValue;
  23452.         this.xulElements.checkEnableSuggest.checked = bSuggestValue;
  23453.         this.xulElements.checkEnableUsage.checked = bEnableUsageValue;
  23454.         this.xulElements.checkEnableClickToSearchBox.checked = bEnableClickToSearchBox;
  23455.         this.xulElements.checkEnableSearchBackToDefault.checked = bEnableSearchBackToDefault;
  23456.  
  23457.         if (EBActionManager_CT2384137.IsToolbarMC())
  23458.             this.xulElements.checkDontShowMCDetectedPopup.checked = bDontShowMCPopup;
  23459.         else
  23460.             this.xulElements.checkDontShowMCDetectedPopup.style.display = "none";
  23461.  
  23462.         this.xulElements.checkSearchFromAddress.checked = bEnableSearchFromAddress;
  23463.  
  23464.         if (EBGlobalConsts_CT2384137.FixPageNotFoundErrorsEnabled)
  23465.             this.xulElements.checkFixPageNotFoundError.checked = bFixPageNotFoundErrors;
  23466.         else
  23467.             this.xulElements.checkFixPageNotFoundError.style.display = "none";
  23468.  
  23469.         this.xulElements.checkEnableSuggest.disabled = !bHistoryValue;
  23470.         this.xulElements.checkEnableHistory.addEventListener("click", enebleHistoryEvent, false);
  23471.  
  23472.         if (this.oWindow.oToolbarManager_CT2384137.searchInNewTabAvailable())
  23473.             this.xulElements.checkSearchInNewTab.checked = bEnableSearchInNewTab;
  23474.         else
  23475.             this.xulElements.checkSearchInNewTab.style.display = "none";
  23476.     };
  23477.  
  23478.     this.onunload = function(event) {
  23479.         delete manager;
  23480.         this.xulElements.checkEnableHistory.removeEventListener("click", enebleHistoryEvent, false);
  23481.         delete enebleHistoryEvent;
  23482.     };
  23483.  
  23484.     this.ondialogAccept = function(event) {
  23485.         try {
  23486.             if (bHistoryValue != this.xulElements.checkEnableHistory.checked) {
  23487.                 this.changed = true;
  23488.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.EnableSearchHistory, !bHistoryValue);
  23489.                 if (!this.xulElements.checkEnableHistory.checked) {
  23490.                     this.changeSearchSuggestState(false);
  23491.                     this.clearAllSearchHistory(false);
  23492.                 }
  23493.             }
  23494.  
  23495.             if (this.xulElements.checkEnableHistory.checked && bSuggestValue != this.xulElements.checkEnableSuggest.checked) {
  23496.                 this.changed = true;
  23497.                 this.changeSearchSuggestState(!bSuggestValue);
  23498.             }
  23499.  
  23500.             if (bEnableUsageValue != this.xulElements.checkEnableUsage.checked) {
  23501.                 this.oWindow.EBUsageManager_CT2384137.enabled = !bEnableUsageValue;
  23502.             }
  23503.  
  23504.             if (bEnableClickToSearchBox != this.xulElements.checkEnableClickToSearchBox.checked) {
  23505.                 this.changed = true;
  23506.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.EnableClickToSearchBox, !bEnableClickToSearchBox);
  23507.             }
  23508.  
  23509.             if (bEnableSearchBackToDefault != this.xulElements.checkEnableSearchBackToDefault.checked) {
  23510.                 this.changed = true;
  23511.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.SearchBackToDefault, !bEnableSearchBackToDefault);
  23512.             }
  23513.  
  23514.             if (bDontShowMCPopup != this.xulElements.checkDontShowMCDetectedPopup.checked) {
  23515.                 this.changed = true;
  23516.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.MCDetectTooltipShow, !bDontShowMCPopup);
  23517.             }
  23518.  
  23519.             if (EBGlobalConsts_CT2384137.FixPageNotFoundErrorsEnabled &&
  23520.                     bFixPageNotFoundErrors != this.xulElements.checkFixPageNotFoundError.checked) {
  23521.                 this.changed = true;
  23522.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBPreferenceConsts_CT2384137.FixPageNotFoundErrors, !bFixPageNotFoundErrors);
  23523.                 this.oWindow.oToolbarManager_CT2384137.fix404Checked(!bFixPageNotFoundErrors);
  23524.             }
  23525.  
  23526.             if (bEnableSearchFromAddress != this.xulElements.checkSearchFromAddress.checked)
  23527.                 EBSearchFromAddressBar_CT2384137.changeState(!bEnableSearchFromAddress);
  23528.  
  23529.             if (bEnableSearchInNewTab != this.xulElements.checkSearchInNewTab.checked) {
  23530.                 //no need to refresh toolbar
  23531.                 if (newTabManager)
  23532.                     newTabManager.userEnabled = !bEnableSearchInNewTab;
  23533.             }
  23534.         }
  23535.         catch (e) {
  23536.             EBLog(e);
  23537.         }
  23538.     };
  23539.     
  23540.     this.applyLanguagePack = function() {
  23541.         this.xulElements.tabAdditionalSettings.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_TAB_TITLE'));
  23542.         this.xulElements.lblAdditionalSettings.value = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_TAB_TITLE');
  23543.         this.xulElements.dscAdditionalSettings.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_TAB_DESCRIPTION').replace(/\n/g, "<html:br />");
  23544.         this.xulElements.checkEnableHistory.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_ENABLE_HISTORY'));
  23545.         this.xulElements.checkEnableSuggest.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_SUGGEST'));
  23546.         this.xulElements.checkEnableUsage.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_USAGE'));
  23547.         this.xulElements.checkEnableClickToSearchBox.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_CLICK_TO_SEARCHBOX'));
  23548.         this.xulElements.checkEnableSearchBackToDefault.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_BACK_TO_DEFAULT_SEARCH_ENGINE'));
  23549.         this.xulElements.checkDontShowMCDetectedPopup.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_SHOW_POPUP_ON_COMMUNITY_DETECTED'));
  23550.         this.xulElements.checkFixPageNotFoundError.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_FIX_PAGE_NOT_FOUND_ERRORS'));
  23551.         this.xulElements.checkSearchFromAddress.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ENABLE_SEARCH_ADDRESS_BAR'));
  23552.         this.xulElements.btnClearHistory.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_BUTTON_CLEAR_HISTORY'));
  23553.         this.xulElements.checkSearchInNewTab.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_ADDITIONAL_SEARCH_IN_NEW_TAB'));
  23554.     };
  23555. };
  23556.  
  23557. function EBToolbarOptions_ThirdPartyComponents_CT2384137() {
  23558.     this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  23559.     
  23560.     this.xulElements = new Object();
  23561.     this.xulElements.tabThirdPartyComponents = document.getElementById("tabThirdPartyComponents");
  23562.     this.xulElements.tpThirdPartyComponents = document.getElementById("tpThirdPartyComponents");
  23563.     this.xulElements.lblThirdPartyComponents = document.getElementById("lblThirdPartyComponents");
  23564.     this.xulElements.dscThirdPartyComponents = document.getElementById("dscThirdPartyComponents");
  23565.     this.xulElements.showHideButton = document.getElementById("btnShowHide3rdParty");
  23566.     this.xulElements.listComponents = document.getElementById("listThirdPartyComponents");
  23567.     this.xulElements.listcolComponents = document.getElementById("listcolsThirdPartyComponents");
  23568.  
  23569.     var manager = this;
  23570.     this.onClickCheckBox = function(e) {
  23571.         var isChecked = parseBool(e.target.getAttribute("checked"));
  23572.         manager.setShowHideBtnLabel(!isChecked);
  23573.         e.target.setAttribute("checked", (!isChecked).toString());
  23574.     };
  23575.     var disabled = false;
  23576.  
  23577.     this.onload = function() {
  23578.         var thirdPartyItemsHash = this.oWindow.oToolbarManager_CT2384137.getToolbarData().thirdPartyItemsHash;
  23579.         if (!thirdPartyItemsHash || thirdPartyItemsHash.Count() == 0 || !EBGlobalManager_CT2384137.IsWindowsPlatform()) {
  23580.             disabled = true;
  23581.             this.xulElements.tpThirdPartyComponents.style.visibility = "hidden";
  23582.             this.xulElements.tabThirdPartyComponents.style.display = "none";
  23583.             return;
  23584.         }
  23585.  
  23586.         this.addComponents(this.oWindow.oToolbarManager_CT2384137.getToolbarData().thirdPartyItemsHash);
  23587.     };
  23588.  
  23589.     this.onunload = function() { };
  23590.  
  23591.     this.ondialogAccept = function() {
  23592.         if (disabled) return;
  23593.  
  23594.         var checkBox = null;
  23595.         var item = null;
  23596.         for (var i = 0; i < this.xulElements.listComponents.getRowCount(); i++) {
  23597.             checkBox = this.xulElements.listComponents.getItemAtIndex(i).firstChild;
  23598.             item = this.oWindow.oToolbarManager_CT2384137.getToolbarData().thirdPartyItemsHash.GetByID(checkBox.id);
  23599.             if (item.isShow() != parseBool(checkBox.getAttribute("checked"))) {
  23600.                 this.changed = true;
  23601.                 item.setShowState(!item.isShow());
  23602.             }
  23603.         }
  23604.     };
  23605.  
  23606.     this.applyLanguagePack = function() {
  23607.         if (disabled) return;
  23608.  
  23609.         this.xulElements.tabThirdPartyComponents.setAttribute('label', this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_USEFUL_COMPONENTS_TAB_TITLE'));
  23610.         this.xulElements.lblThirdPartyComponents.value = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_USEFUL_COMPONENTS_TAB_TITLE');
  23611.         this.xulElements.dscThirdPartyComponents.innerHTML = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_USEFUL_COMPONENTS_TAB_DESCRIPTION').replace(/\n/g, "<html:br />");
  23612.         this.btnCaptionHide = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_HIDE_COMPONENT_BUTTON');
  23613.         this.btnCaptionShow = this.oWindow.oToolbarManager_CT2384137.getLPKey('CTLP_STR_ID_OPTIONS_DLG_SHOW_COMPONENT_BUTTON');
  23614.  
  23615.         this.xulElements.listComponents.selectedIndex = 0;
  23616.     };
  23617. };
  23618.  
  23619. EBToolbarOptions_ThirdPartyComponents_CT2384137.prototype = new EBBaseSectionManager_CT2384137();
  23620. function EBRadioCoreObserver_CT2384137(callbackForChangeState) {
  23621.     this.Topic = EBRadioConsts_CT2384137.Observer.RadioWMPcoreTopic;
  23622.  
  23623.     this.observe = function(aSubject, aTopic, aData) {
  23624.         try {
  23625.             callbackForChangeState(aData);
  23626.         }
  23627.         catch (e) {
  23628.             EBLog(e, "EBRadioCoreObserver");
  23629.         }
  23630.     }
  23631. }
  23632.  
  23633. EBRadioCoreObserver_CT2384137.prototype = new EBBaseObserver_CT2384137();
  23634. var EBRadioConsts_CT2384137 = 
  23635. {
  23636.     xmlTags :
  23637.     {
  23638.         RADIO_STATIONS  : 'RADIO_STATIONS',
  23639.         RADIO_STATION   : 'RADIO_STATION',
  23640.         STATION_ID      : 'STATION_ID',
  23641.         STATION_NAME    : 'STATION_NAME',
  23642.         STATION_URL     : 'STATION_URL',
  23643.         TYPE            : 'TYPE',
  23644.         CONTENT_TYPE    : 'CONTENT_TYPE'
  23645.     },
  23646.     
  23647.     Registry :
  23648.     {
  23649.         PlayState                : 'RadioPlayState',
  23650.         ShowState                : 'RadioShowState',
  23651.         ErrorString                : 'RadioErrorString',
  23652.         StationName                : 'RadioStationName',
  23653.         StationURL                : 'RadioStationURL',
  23654.         StationID                : 'RadioStationID',
  23655.         Volume                    : 'RadioVolume',
  23656.         MenuSelectedID            : 'RadioMenuSelectedID',
  23657.         MediaType                : 'RadioMediaType',
  23658.         LastUpdateServerTime    : 'RadioLastUpdateServer',
  23659.         LastUpdateServerIPTime  : 'RadioLastUpdateIPServer',
  23660.         LastCheckTime            : 'RadioLastCheckTime',
  23661.         CookiesImportComplete    : 'RadioCookiesImportComplete',
  23662.         Shrinked                : 'RadioShrinked',
  23663.         UseRealActiveX            : 'RadioUseRealActiveX',
  23664.         IsPodcast                : 'RadioIsPodcast',
  23665.         MediaID                 : 'RadioMediaID',
  23666.         InvalidateCache         : 'InvalidateCache'
  23667.     },
  23668.     
  23669.     MediaFileType :
  23670.     {
  23671.         User        : 'user',
  23672.         Publisher   : 'publisher',
  23673.         Recent      : 'recent',
  23674.         IP          : 'ip'
  23675.     },
  23676.     
  23677.     StationsCookie :
  23678.     {
  23679.         DomainConduit           : 'webradio.conduit.com',
  23680.         DomainSite2             : 'site2',
  23681.         DomainEffectiveBrand    : 'www.effectivebrand.com',
  23682.         Name                    : 'RadioUserDefined0'
  23683.     },
  23684.     
  23685.     DisplayText        : 'Radio Player',
  23686.     DisplayIcon        : 'chrome://iobitcom/skin/radio/RadioPlayChev.ico',
  23687.     ErrorPage        : 'RadioTroubleshooting/',
  23688.     TimerInterval    : 30*1000,
  23689.     GetRealURL        : 'RadioTroubleshooting/',
  23690.     SpecialString    : '~!!~',
  23691.     
  23692.     NowState :
  23693.     {
  23694.         PlayState        : 'stopped',
  23695.         ButtonState        : 'play',
  23696.         StationName        : '',
  23697.         StationURL        : '',
  23698.         MediaType        : '',
  23699.         IsPodcast        : false,
  23700.         MediaID         : '',
  23701.         ErrorStr        : '',
  23702.         MenuSelectedID  : '',
  23703.         Volume            : '',
  23704.         InChevron        : '',
  23705.         IsUserPause        : false,
  23706.         IsShrinked      : false
  23707. },
  23708.  
  23709.     PlayerTypes:
  23710.     {
  23711.          MediaPlayer    :'Media Player',
  23712.          RealPlayer     :'Real Player'
  23713.     },
  23714.     Observer:
  23715.     {
  23716.         RadioWMPcoreTopic  : 'RadioWMPcoreTopic_CT2384137',
  23717.         NewStateEvent      : 'play_state_changed',
  23718.         ErrorEvent         : 'error'
  23719.     },
  23720.     
  23721.     SetStationName                : false,
  23722.     
  23723.     MaxRecentStations            : 10,
  23724.     
  23725.     IsUpdateStationFromPodcast    : true,
  23726.     
  23727.     xulSlider                    : null,
  23728.     
  23729.     UserMediaList                : null,
  23730.     PublisherMediaList            : null,
  23731.     RecentMediaList                : null,
  23732.     IPMediaList                 : null,
  23733.     RadioMenu                    : null,
  23734.     RadioMainID                    : 'EBRadioXUL_CT2384137',
  23735.     RadioPlayID                    : 'EBRadioPlay_CT2384137',
  23736.     RadioStopID                    : 'EBRadioStop_CT2384137',
  23737.     RadioVolumeID               : 'EBRadioVolume_CT2384137',
  23738.     RadioMenuButtonID            : 'EBRadioMenuButton_CT2384137',
  23739.     RadioMenuButtonChevronID    : 'EBRadioMenuButtonChevron_CT2384137',
  23740.     RadioPlayButtonChevronID    : 'EBRadioPlayButtonChevron_CT2384137',
  23741.     RadioMenuButtonContainerID    : 'EBRadioMenuButtonContainer_CT2384137',
  23742.     RadioSliderContainerID        : 'EBRadioSliderContainer_CT2384137',
  23743.     RadioShrinkID                : 'EBRadioShrink_CT2384137',
  23744.     RadioEqID                    : 'EBRadioEq_CT2384137',
  23745.     RadioSliderID                : 'EBRadioSlider_CT2384137',
  23746.     
  23747.     EnableIPStations            : false,
  23748.     
  23749.     FolderName            : 'radio',
  23750.     PublisherMediaFile    : 'Predefined_Media_List.xml',
  23751.     IPMediaFile         : 'IP_Media_List.xml',
  23752.     UserMediaFile        : 'User_Media_List.xml',
  23753.     RecentMediaFile        : 'Recent_Media_List.xml',
  23754.     ServerURL            : 'http://radio.services.conduit.com/RadioRequest.ctp',
  23755.     ServerRQAdd            : '?type=user&ctid=CTxxxx&lut=',
  23756.     ServerRQAddIP       : '?type=ipstations&iplut=',
  23757.     ServerRQAddBoth     : '?type=userip&ctid=CTxxxx&lut=<LUT>&iplut=',
  23758.     ServerRQInvalidateCache: '&ic=true',
  23759.     SearchAdd            : '?type=search&query=',
  23760.     CheckInterval        : 30*60*1000, //millisec
  23761.     PodcastCheckInterval: 30, //minutes
  23762.     
  23763.     XMLResponseIP           : 'IP_STATIONS_REPLY',
  23764.     XMLResponsePublisher    : 'PUBLISHER_STATIONS_REPLY',
  23765.     XMLResponseMultiple     : 'MULTIPLE_STATIONS_REPLY',
  23766.     XMLRadioStations        : 'RADIO_STATIONS',
  23767.     XMLLUT                  : 'LAST_UPDATE_TIME',
  23768.     XMLResponseNoChange     : 'NOT_MODIFIED',
  23769.     XMLResponseErrorReply   : 'RADIO_ERROR',
  23770.     
  23771.     //Menu
  23772.     MenuIDPreffix                : 'EBRadioMenu_CT2384137',
  23773.     MenuIDRecentPreffix         : '_RECENT',
  23774.     PodcastPreffix                : 'EBRadioPodcastPreffix',
  23775.     LoadingText                    : 'Loading...',
  23776.     LoadingHint                    : 'Wait, Loading...',
  23777.     MenuUserStations            : 'My Stations',
  23778.     MenuUserStationsHint        : 'Stations that you defined',
  23779.     MenuAddStations             : 'Add and Edit Stations',
  23780.     MenuAddStationsHint            : 'Add and edit the stations in the radio',
  23781.     MenuMoreStations            : 'More',
  23782.     MenuLocalStations           : 'Local Stations',
  23783.     MenuRecentStations          : 'Recent',
  23784.     MenuMoreStationsHint        : 'View additional radio stations',
  23785.     MenuPodcastNoItems            : 'No items found in podcast',
  23786.     MenuPodcastTimeout            : 'Podcast currently not available',
  23787.     MaxStationsInMenu            : 20
  23788. }
  23789.  
  23790. var EBRadioCore_CT2384137 =
  23791. {
  23792.     isActive: false,
  23793.     wmp: null,
  23794.     real: null,
  23795.     wmp_active: false,
  23796.     real_active: false,
  23797.     useRealActiveX: false,
  23798.  
  23799.     GetUniversalState: function(stateId, mediaType) {
  23800.         if (mediaType == EBRadioConsts_CT2384137.PlayerTypes.RealPlayer) {
  23801.             switch (stateId) {
  23802.                 case 0: return "stopped"; break;
  23803.                 case 1: return "waiting"; break;
  23804.                 case 2: return "buffering"; break;
  23805.                 case 3: return "playing"; break;
  23806.                 case 4: return "paused"; break;
  23807.                 case 5: return "reconnecting"; break;
  23808.             }
  23809.         }
  23810.         else if (mediaType == EBRadioConsts_CT2384137.PlayerTypes.MediaPlayer) {
  23811.             switch (stateId) {
  23812.                 case 0: return "undefined"; break;
  23813.                 case 1: return "stopped"; break;
  23814.                 case 2: return "paused"; break;
  23815.                 case 3: return "playing"; break;
  23816.                 case 6: return "buffering"; break;
  23817.                 case 7: return "waiting"; break;
  23818.                 case 8: return "media ended"; break;
  23819.                 case 9: return "preparing new item"; break;
  23820.                 case 10: return "ready"; break;
  23821.                 case 11: return "reconnecting"; break;
  23822.             }
  23823.         }
  23824.     },
  23825.  
  23826.     BroadcastVolume: function(volume) {
  23827.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  23828.                         .getService(Components.interfaces.nsIWindowMediator);
  23829.  
  23830.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  23831.         while (objEnumerator.hasMoreElements()) {
  23832.             var objWindow = objEnumerator.getNext();
  23833.             if (objWindow.EBRadioCore_CT2384137) {
  23834.                 try {
  23835.                     if (objWindow.EBRadioCore_CT2384137.isActive) {
  23836.                         if (objWindow.EBRadioCore_CT2384137.wmp || objWindow.EBRadioCore_CT2384137.real) {
  23837.                             try {
  23838.                                 objWindow.EBRadioCore_CT2384137.wmp.setVolume(volume);
  23839.                             }
  23840.                             catch (e) { }
  23841.                             try {
  23842.                                 objWindow.EBRadioCore_CT2384137.real.SetVolume(volume)
  23843.                             }
  23844.                             catch (e) { }
  23845.                             break;
  23846.                         }
  23847.                     }
  23848.                 }
  23849.                 catch (ex) { }
  23850.             }
  23851.         }
  23852.  
  23853.     },
  23854.  
  23855.     NullifyObjects: function() {
  23856.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  23857.                         .getService(Components.interfaces.nsIWindowMediator);
  23858.  
  23859.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  23860.         while (objEnumerator.hasMoreElements()) {
  23861.             var objWindow = objEnumerator.getNext();
  23862.             try {
  23863.                 if (objWindow.EBRadioManager_CT2384137.OnStop) {
  23864.                     objWindow.EBRadioManager_CT2384137.OnStop();
  23865.                 }
  23866.             }
  23867.             catch (ex) { }
  23868.         }
  23869.  
  23870.         EBRadioConsts_CT2384137.NowState.PlayState = "stopped";
  23871.  
  23872.         if (this.real_active) {
  23873.             try {
  23874.                 this.real.DoStop();
  23875.                 this.real_active = false;
  23876.             }
  23877.             catch (e) { }
  23878.         }
  23879.  
  23880.         if (this.wmp_active) {
  23881.             try {
  23882.                 this.wmp.stop();
  23883.                 this.wmp_active = false;
  23884.             }
  23885.             catch (e) { }
  23886.         }
  23887.  
  23888.         this.wmp = null;
  23889.         this.real = null;
  23890.  
  23891.  
  23892.         this.isActive = false;
  23893.     },
  23894.  
  23895.     UnloadToolbar: function(isShown) {
  23896.         if (!this.isActive) {
  23897.             return;
  23898.         }
  23899.         if (!isShown) {
  23900.             this.NullifyObjects();
  23901.             return;
  23902.         }
  23903.         var found = false;
  23904.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  23905.                         .getService(Components.interfaces.nsIWindowMediator);
  23906.  
  23907.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  23908.         while (objEnumerator.hasMoreElements()) {
  23909.             var objWindow = objEnumerator.getNext();
  23910.             if (objWindow.EBActionManager_CT2384137.IsToolbarShown()) {
  23911.                 try {
  23912.                     if (objWindow != window) {
  23913.                         objWindow.EBRadioCore_CT2384137.real = this.real;
  23914.                         objWindow.EBRadioCore_CT2384137.real_active = this.real_active;
  23915.                         objWindow.EBRadioCore_CT2384137.wmp = this.wmp;
  23916.                         objWindow.EBRadioCore_CT2384137.wmp_active = this.wmp_active;
  23917.                         objWindow.EBRadioCore_CT2384137.isActive = true;
  23918.                         objWindow.EBRadioManager_CT2384137.HandleNewEvents(EBRadioConsts_CT2384137.Observer.NewStateEvent);
  23919.                         found = true;
  23920.                         break;
  23921.                     }
  23922.                 }
  23923.                 catch (ex) { }
  23924.             }
  23925.         }
  23926.         if (!found) {
  23927.             this.NullifyObjects();
  23928.         }
  23929.     },
  23930.  
  23931.     CreateCore: function(which) {
  23932.         this.isActive = true;
  23933.         if (which == EBRadioConsts_CT2384137.PlayerTypes.MediaPlayer) {
  23934.             try {
  23935.                 this.wmp = Components.classes["@conduit.com/radioWMPCore;1"].createInstance(Components.interfaces.IRadioWMPCore);
  23936.                 this.wmp.registerTopicForObserver(EBRadioConsts_CT2384137.Observer.RadioWMPcoreTopic);
  23937.                 this.wmp.setVolume(EBRadioConsts_CT2384137.NowState.Volume);
  23938.             }
  23939.             catch (ex) {
  23940.                 EBRadioManager_CT2384137.StateManager('error', "Cannot find Windows Media Player, click here for troubleshoot")
  23941.                 this.wmp = null;
  23942.             }
  23943.         }
  23944.         else if (which == EBRadioConsts_CT2384137.PlayerTypes.RealPlayer) {
  23945.             if (this.useRealActiveX) {
  23946.                 try {
  23947.                     this.real = new window.GeckoActiveXObject('{CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA}');
  23948.                     this.real.SetWantErrors(true);
  23949.                     this.real.SetSource('');
  23950.                 }
  23951.                 catch (ex) {
  23952.                     EBRadioManager_CT2384137.StateManager('error', "Cannot find Real Player, click here for troubleshoot")
  23953.                     this.real = null;
  23954.                 }
  23955.             }
  23956.             else {
  23957.                 if (EBWindows_CT2384137.WindowsShellExecute('realplay.exe', null, false)) {
  23958.                     this.real = 'realplay.exe';
  23959.                 }
  23960.                 else if (EBWindows_CT2384137.WindowsShellExecute('mplayerc.exe', null, false)) {
  23961.                     this.real = 'mplayerc.exe';
  23962.                 }
  23963.                 else {
  23964.                     EBRadioManager_CT2384137.StateManager('error', 'Cannot find Real Player, click here to get Real Player');
  23965.                 }
  23966.             }
  23967.  
  23968.         }
  23969.  
  23970.     },
  23971.  
  23972.     Init: function() {
  23973.         this.UpdateGUIOnLoad();
  23974.     },
  23975.  
  23976.     UpdateGUIOnLoad: function() {
  23977.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  23978.                         .getService(Components.interfaces.nsIWindowMediator);
  23979.  
  23980.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  23981.         while (objEnumerator.hasMoreElements()) {
  23982.             var objWindow = objEnumerator.getNext();
  23983.             if (objWindow.EBRadioCore_CT2384137) {
  23984.                 try {
  23985.                     if (objWindow.EBRadioCore_CT2384137.isActive) {
  23986.                         EBRadioConsts_CT2384137.NowState.PlayState = objWindow.EBRadioConsts_CT2384137.NowState.PlayState;
  23987.                         EBRadioConsts_CT2384137.NowState.ButtonState = objWindow.EBRadioConsts_CT2384137.NowState.ButtonState;
  23988.                         EBRadioConsts_CT2384137.NowState.ErrorStr = objWindow.EBRadioConsts_CT2384137.NowState.ErrorStr;
  23989.                         setTimeout(function() { EBRadioManager_CT2384137.UpdatePlayState(); }, 100);
  23990.                         break;
  23991.                     }
  23992.                 }
  23993.                 catch (ex) { }
  23994.             }
  23995.         }
  23996.     },
  23997.  
  23998.     GetStateFromCore: function() {
  23999.         var url = '';
  24000.         var playState = '';
  24001.  
  24002.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  24003.                         .getService(Components.interfaces.nsIWindowMediator);
  24004.  
  24005.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  24006.         while (objEnumerator.hasMoreElements()) {
  24007.             var objWindow = objEnumerator.getNext();
  24008.             if (objWindow.EBRadioCore_CT2384137) {
  24009.                 try {
  24010.                     if (objWindow.EBRadioCore_CT2384137.isActive) {
  24011.  
  24012.                         url = objWindow.EBRadioCore_CT2384137.wmp.getStaionURL();
  24013.                         playState = objWindow.EBRadioCore_CT2384137.wmp.getPlayState();
  24014.                         EBRadioManager_CT2384137.StateManager(playState);
  24015.                     }
  24016.                 }
  24017.                 catch (ex) { }
  24018.             }
  24019.         }
  24020.     },
  24021.  
  24022.     BroadcastPlay: function(stationURL, mediaType) {
  24023.         var found = false;
  24024.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  24025.                         .getService(Components.interfaces.nsIWindowMediator);
  24026.  
  24027.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  24028.         while (objEnumerator.hasMoreElements()) {
  24029.             var objWindow = objEnumerator.getNext();
  24030.             if (objWindow.EBRadioCore_CT2384137) {
  24031.                 try {
  24032.                     if (objWindow.EBRadioCore_CT2384137.isActive) {
  24033.                         objWindow.EBRadioCore_CT2384137.Play(stationURL, mediaType);
  24034.                         EBRadioManager_CT2384137.HandleNewEvents(EBRadioConsts_CT2384137.Observer.NewStateEvent);
  24035.                         found = true;
  24036.                         break;
  24037.                     }
  24038.                 }
  24039.                 catch (ex) { }
  24040.             }
  24041.         }
  24042.         if (!found) {
  24043.             this.Play(stationURL, mediaType);
  24044.             EBRadioManager_CT2384137.HandleNewEvents(EBRadioConsts_CT2384137.Observer.NewStateEvent);
  24045.         }
  24046.     },
  24047.  
  24048.     BroadcastPause: function(isStop) {
  24049.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  24050.                         .getService(Components.interfaces.nsIWindowMediator);
  24051.  
  24052.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  24053.         while (objEnumerator.hasMoreElements()) {
  24054.             var objWindow = objEnumerator.getNext();
  24055.             if (objWindow.EBRadioCore_CT2384137) {
  24056.                 try {
  24057.                     if (objWindow.EBRadioCore_CT2384137.isActive) {
  24058.                         objWindow.EBRadioCore_CT2384137.Pause(isStop);
  24059.                     }
  24060.                 }
  24061.                 catch (ex) { }
  24062.             }
  24063.         }
  24064.     },
  24065.     
  24066.     Pause: function(isStop) {
  24067.         if (this.wmp_active) {
  24068.             try {
  24069.                 if (isStop) {
  24070.                     this.wmp.stop();
  24071.                 }
  24072.                 else {
  24073.                     try {
  24074.                         if (this.wmp.canPause())
  24075.                             this.wmp.pause();
  24076.  
  24077.                         else
  24078.                             this.wmp.stop();
  24079.  
  24080.                     }
  24081.                     catch (ex) {
  24082.                         EBLog(ex)
  24083.                     }
  24084.                 }
  24085.             }
  24086.             catch (ex) { EBLog(ex) }
  24087.         }
  24088.         else if (this.real_active && this.useRealActiveX) {
  24089.             try {
  24090.                 this.real.DoStop();
  24091.             }
  24092.             catch (ex) { }
  24093.         }
  24094.  
  24095.         
  24096.     },
  24097.  
  24098.     Play: function(stationURL, mediaType) {
  24099.         if (stationURL)
  24100.             stationURL = stationURL.replace(/~!!~/g, "\\\\");
  24101.  
  24102.         if (mediaType == EBRadioConsts_CT2384137.PlayerTypes.MediaPlayer) {
  24103.             if (!this.wmp)
  24104.                 this.CreateCore(mediaType);
  24105.  
  24106.             if (this.real_active && this.useRealActiveX) {
  24107.                 try {
  24108.                     this.real.DoStop();
  24109.                 }
  24110.                 catch (ex) { }
  24111.             }
  24112.             if (this.wmp) {
  24113.                 if (stationURL)
  24114.                     this.wmp.setStaionURL(stationURL);
  24115.                 try { this.wmp.play(); } catch (e) { }
  24116.             }
  24117.             this.real_active = false;
  24118.             this.wmp_active = true;
  24119.         }
  24120.  
  24121.         else if (mediaType == EBRadioConsts_CT2384137.PlayerTypes.RealPlayer) {
  24122.             this.wmp_active = false;
  24123.             this.real_active = true;
  24124.  
  24125.             if (!this.real)
  24126.                 this.CreateCore(mediaType);
  24127.  
  24128.             try {
  24129.                 this.wmp.stop();
  24130.             }
  24131.             catch (ex) { }
  24132.  
  24133.             if (this.real) {
  24134.                 if (this.useRealActiveX) {
  24135.                     this.real.SetSource(stationURL);
  24136.                     this.real.DoPlay();
  24137.                 }
  24138.                 else {
  24139.                     EBWindows_CT2384137.WindowsShellExecute(this.real, stationURL, true);
  24140.                     EBRadioManager_CT2384137.StateManager('real');
  24141.                 }
  24142.             }
  24143.         }
  24144.     },
  24145.  
  24146.     isCreateActiveX: function() {
  24147.         var someoneActive;
  24148.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  24149.                         .getService(Components.interfaces.nsIWindowMediator);
  24150.  
  24151.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  24152.         while (objEnumerator.hasMoreElements()) {
  24153.             var objWindow = objEnumerator.getNext();
  24154.             if (objWindow.EBRadioCore_CT2384137) {
  24155.                 try {
  24156.                     someoneActive = objWindow.EBRadioCore_CT2384137.isActive;
  24157.                     if (someoneActive) {
  24158.                         break;
  24159.                     }
  24160.                 }
  24161.                 catch (ex) { }
  24162.             }
  24163.         }
  24164.         return !someoneActive;
  24165.     }
  24166.  
  24167. }
  24168.  
  24169. var EBRadioDialogManager_CT2384137 =
  24170. {
  24171.     MenuDialogName: 'RadioStationsDialog',
  24172.     SearchDialogName: 'RadioSearchDialog',
  24173.     AddEditDialogName: 'RadioAddEditDialog',
  24174.     SearchDialogTitle: 'Search results for',
  24175.     CantRemovePlaying: "cannot be deleted since it's currently being played. Please switch to a different station and then delete this one",
  24176.     CantRemoveSelected: "cannot be deleted since it's selected for playing. Please switch to a different station and then delete this one",
  24177.     AddDialogLabel: 'Enter the name and stream URL of the station you want to add ',
  24178.     EditDialogLabel: 'Edit the name and stream URL of the selected station',
  24179.     NoStationsText: 'No stations found',
  24180.     ConfirmDeleteText: "",
  24181.     ConfirmDeleteTitle: "",
  24182.     MediaExistsText: 'This media \"{{MEDIA_NAME}}\" already exists in your list',
  24183.     SelectAudioFiles: 'Select Audio Files',
  24184.     oMediaList: null,
  24185.     arrMediaList: null,
  24186.     oMedia: null,
  24187.     SelectedIndex: null,
  24188.  
  24189.  
  24190.     // +++++++++++++ Generic +++++++++++++++
  24191.     FillRadioStations: function() {
  24192.         var objStationsList = document.getElementById('listStationsList');
  24193.         var oMedia = null;
  24194.         var listItem = null;
  24195.  
  24196.         //nullify all first
  24197.  
  24198.         while (objStationsList.childNodes.length > 2) {
  24199.             objStationsList.removeChild(objStationsList.lastChild);
  24200.         }
  24201.  
  24202.         if (!this.arrMediaList) {
  24203.             objStationsList.appendChild(this.CreateNoStationsListItem());
  24204.             return;
  24205.         }
  24206.         for (var i = 0; i < this.arrMediaList.Count(); i++) {
  24207.             oMedia = this.arrMediaList.GetByIndex(i)
  24208.             listItem = oMedia.toListItem(document);
  24209.             objStationsList.appendChild(listItem);
  24210.         }
  24211.     },
  24212.  
  24213.     CreateNoStationsListItem: function() {
  24214.         var listItem = document.createElement('listitem');
  24215.         var listCell = document.createElement('listcell');
  24216.         listCell.setAttribute('label', this.NoStationsText);
  24217.         listItem.appendChild(listCell);
  24218.         return listItem;
  24219.     },
  24220.  
  24221.     // +++++++++++++ Main Dialog +++++++++++++++
  24222.     OpenMainDialog: function(win) {
  24223.         var MenuChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + 'radio_menu.xul';
  24224.         win.openDialog(MenuChromePath,
  24225.                         this.MenuDialogName,
  24226.                         'chrome,modal,centerscreen,chrome,resizable=no');
  24227.  
  24228.     },
  24229.  
  24230.     MainDialog_OnDblClick: function(event) {
  24231.         var oListStationsList = document.getElementById('listStationsList');
  24232.         var iIndex = oListStationsList.selectedIndex;
  24233.         if (iIndex > -1) {
  24234.             this.oMedia = this.arrMediaList.GetByIndex(iIndex);
  24235.             this.MainDialog_OnOpenEditDialog(this.oMedia.MediaURL, this.oMedia.MediaName, this.oMedia.GetType());
  24236.  
  24237.         }
  24238.     },
  24239.  
  24240.     MainDialog_OnSelect: function(event) {
  24241.         var oListStationsList = document.getElementById('listStationsList');
  24242.         var iIndex = oListStationsList.selectedIndex;
  24243.         var oBtnSelect = document.getElementById('btnEdit');
  24244.         var oBtnDelete = document.getElementById('btnDelete');
  24245.         if (iIndex != -1) {
  24246.             oBtnDelete.setAttribute('disabled', 'false');
  24247.             if (oListStationsList.selectedCount == 1) {
  24248.                 oBtnSelect.setAttribute('disabled', 'false');
  24249.                 this.SelectedIndex = iIndex;
  24250.             }
  24251.             else {
  24252.                 oBtnSelect.setAttribute('disabled', 'true');
  24253.             }
  24254.         }
  24255.         else {
  24256.             oBtnSelect.setAttribute('disabled', 'true');
  24257.             oBtnDelete.setAttribute('disabled', 'true');
  24258.  
  24259.         }
  24260.     },
  24261.  
  24262.     MainDialog_OnEdit: function(event) {
  24263.         this.MainDialog_OnDblClick();
  24264.     },
  24265.  
  24266.     MainDialog_OnDelete: function(event) {
  24267.         var oRecentBrowserWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24268.  
  24269.         if (!EBGlobalManager_CT2384137.Confirm(window, oRecentBrowserWindow.EBRadioDialogManager_CT2384137.ConfirmDeleteTitle,
  24270.                 oRecentBrowserWindow.EBRadioDialogManager_CT2384137.ConfirmDeleteText))
  24271.             return;
  24272.  
  24273.         var selectedStationURL = oRecentBrowserWindow.EBRadioConsts_CT2384137.NowState.StationURL;
  24274.         //if podcast item selected, get the podcast's URL.
  24275.         if (oRecentBrowserWindow.EBRadioConsts_CT2384137.NowState.IsPodcast) {
  24276.             try {
  24277.                 var oPodcastMenu = oRecentBrowserWindow.document.getElementById(oRecentBrowserWindow.EBRadioConsts_CT2384137.NowState.MenuSelectedID).parentNode;
  24278.                 var podcastMenuID = oPodcastMenu.getAttribute('id');
  24279.                 podcastMenuID = podcastMenuID.replace(EBRadioConsts_CT2384137.MenuIDPreffix, '');
  24280.                 selectedStationURL = this.arrMediaList.GetByID(podcastMenuID).MediaURL;
  24281.             }
  24282.             catch (ex) { }
  24283.         }
  24284.  
  24285.         var oListStationsList = document.getElementById('listStationsList');
  24286.         var arrSelectedItems = oListStationsList.selectedItems;
  24287.         var iIndex = 0;
  24288.         for (var i = arrSelectedItems.length - 1; i >= 0; i--) {
  24289.             iIndex = oListStationsList.getIndexOfItem(arrSelectedItems[i]);
  24290.             this.arrMediaList.Remove(iIndex, this.arrMediaList.GetByIndex(iIndex).MediaID);
  24291.             // Media List Remove
  24292.             oListStationsList.removeItemAt(iIndex);
  24293.         }
  24294.     },
  24295.  
  24296.     MainDialog_OnOkButton: function() {
  24297.         var xmlStations = this.oMediaList.toXML();
  24298.         var fileName = EBRadioConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + EBRadioConsts_CT2384137.UserMediaFile;
  24299.         EBRadioIOManager_CT2384137.SaveMediaXMLToFile(xmlStations, fileName);
  24300.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24301.         oWindow.EBRadioManager_CT2384137.UpdateMedia('user', xmlStations.documentElement);
  24302.  
  24303.         //usage
  24304.         oWindow.EBUsageRadio_CT2384137.OnCloseSettings(oWindow.EBUsageRadio_CT2384137.ExitCodeOK);
  24305.     },
  24306.  
  24307.     MainDialog_OnCancelButton: function() {
  24308.         //usage
  24309.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24310.         oWindow.EBUsageRadio_CT2384137.OnCloseSettings(oWindow.EBUsageRadio_CT2384137.ExitCodeCancel);
  24311.     },
  24312.  
  24313.     MainDialog_OnOpenEditDialog: function(mURL, mName, mType) {
  24314.         var AddEditChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + 'radio_addEdit.xul';
  24315.         window.openDialog(AddEditChromePath,
  24316.                         this.AddEditDialogName,
  24317.                         'chrome,modal,centerscreen,chrome,resizable=no',
  24318.                         'edit', mURL, mName, mType);
  24319.     },
  24320.  
  24321.     MainDialog_OnLoad: function(event) {
  24322.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24323.         //usage
  24324.         objWindow.EBUsageRadio_CT2384137.OnOpenSettingsDialog();
  24325.  
  24326.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  24327.         if (dialogsDirection)
  24328.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "ebRadioMenuDialog");
  24329.  
  24330.         if (objWindow.EBGlobalManager_CT2384137.IsLocaleRTL())
  24331.             this.MainDialog_ConvertToRTL();
  24332.  
  24333.         document.getElementById('ebRadioMenuDialog').getButton('cancel').focus();
  24334.  
  24335.         EBRadioLanguagePack_CT2384137.MenuDialog(objWindow);
  24336.         this.oMediaList = objWindow.EBRadioConsts_CT2384137.UserMediaList;
  24337.  
  24338.         if (objWindow.EBRadioConsts_CT2384137.RecentMediaList &&
  24339.         !objWindow.EBRadioConsts_CT2384137.RecentMediaList.isEmpty())
  24340.             document.getElementById("btnClearRecent").disabled = false;
  24341.  
  24342.         if (!this.oMediaList)
  24343.             return;
  24344.  
  24345.         this.arrMediaList = this.oMediaList.arrMedia;
  24346.         this.FillRadioStations();
  24347.     },
  24348.  
  24349.     MainDialog_ConvertToRTL: function() {
  24350.         var arrArrows = document.getElementsByTagName("image");
  24351.         for (var i = 0; i < arrArrows.length; i++) {
  24352.             if (arrArrows[i].getAttribute("src") == "chrome://iobitcom/skin/radio/RadioErrow.ico") {
  24353.                 arrArrows[i].src = "chrome://iobitcom/skin/radio/RadioErrowRTL.ico";
  24354.             }
  24355.         }
  24356.     },
  24357.  
  24358.     MainDialog_OnInputSearch: function(obj) {
  24359.         var oBtnSearch = document.getElementById('btnSearch');
  24360.         var strValue = obj.value;
  24361.         if (strValue.length > 0 && EBGlobalManager_CT2384137.TotalTrim(strValue) != '') {
  24362.             oBtnSearch.setAttribute('disabled', 'false');
  24363.         }
  24364.         else {
  24365.             oBtnSearch.setAttribute('disabled', 'true');
  24366.         }
  24367.     },
  24368.  
  24369.     MainDialog_OnOpenSearchDialog: function(searchStr) {
  24370.         //usage
  24371.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24372.         oWindow.EBUsageRadio_CT2384137.OnSettingsAction(oWindow.EBUsageRadio_CT2384137.SettingsActionSearch);
  24373.  
  24374.         var SearchChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + 'radio_search.xul';
  24375.         window.openDialog(SearchChromePath,
  24376.                         this.SearchDialogName,
  24377.                         'chrome,modal,centerscreen,chrome,resizable=no', searchStr);
  24378.         return false;
  24379.     },
  24380.  
  24381.     MainDialog_OnOpenAddDialog: function() {
  24382.         //usage
  24383.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24384.         oWindow.EBUsageRadio_CT2384137.OnSettingsAction(oWindow.EBUsageRadio_CT2384137.SettingsActionDefine);
  24385.  
  24386.         var AddEditChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + 'radio_addEdit.xul';
  24387.         window.openDialog(AddEditChromePath,
  24388.                         this.AddEditDialogName,
  24389.                         'chrome,modal,centerscreen,chrome,resizable=no', 'add');
  24390.     },
  24391.  
  24392.     MainDialog_OnEnterKey: function(event) {
  24393.         var AddEditChromePath = EBGlobalConsts_CT2384137.ChromeContentPath + 'radio_addEdit.xul';
  24394.         window.openDialog(AddEditChromePath,
  24395.                         this.AddEditDialogName,
  24396.                         'chrome,modal,centerscreen,chrome,resizable=no', 'add');
  24397.  
  24398.     },
  24399.  
  24400.     MainDialog_OnInputSearchCheckKey: function(event, strValue) {
  24401.         if (event.keyCode == 13 && strValue) {
  24402.             this.MainDialog_OnOpenSearchDialog(strValue);
  24403.         }
  24404.     },
  24405.  
  24406.     MainDialog_OnListBoxCheckKey: function(event) {
  24407.         if (event.keyCode == 13) {
  24408.             this.MainDialog_OnEdit();
  24409.         }
  24410.  
  24411.     },
  24412.  
  24413.     MainDialog_OnFileBrowse: function(event) {
  24414.         //usage
  24415.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24416.         oWindow.EBUsageRadio_CT2384137.OnSettingsAction(oWindow.EBUsageRadio_CT2384137.SettingsActionAddFiles);
  24417.  
  24418.         var nsIFilePicker = Components.interfaces.nsIFilePicker;
  24419.         var objFilePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  24420.         objFilePicker.init(window, this.SelectAudioFiles, nsIFilePicker.modeOpenMultiple);
  24421.         objFilePicker.appendFilter("All files (*.*)", "*.*");
  24422.  
  24423.         //and if he doesn't so to the windows xp media path as the default path:
  24424.         strDisplayDir = EBWindows_CT2384137.GetWindowsMyMusicPath();
  24425.         var objDisplayDir = EBDirIO_CT2384137.open(strDisplayDir);
  24426.         if (objDisplayDir) {
  24427.             objFilePicker.displayDirectory = objDisplayDir;
  24428.         }
  24429.  
  24430.         var iResult = objFilePicker.show();
  24431.         if (iResult == nsIFilePicker.returnOK) {
  24432.             var objFiles = objFilePicker.files;
  24433.  
  24434.         }
  24435.         var file = null;
  24436.         var oNewMedia = null;
  24437.         var objStationsList = document.getElementById('listStationsList');
  24438.         while (objFiles.hasMoreElements()) {
  24439.             file = objFiles.getNext().QueryInterface(Components.interfaces.nsILocalFile);
  24440.             oNewMedia = new EBRadioMedia_CT2384137();
  24441.             oNewMedia.MediaName = file.path.slice(file.path.lastIndexOf('\\') + 1);
  24442.             oNewMedia.MediaURL = file.path.replace(/\\/g, EBRadioConsts_CT2384137.SpecialString);
  24443.             oNewMedia.MediaID = oNewMedia.MediaURL;
  24444.             oNewMedia.SetType("mp");
  24445.             if (!this.arrMediaList.Contains(oNewMedia.MediaID)) {
  24446.                 this.arrMediaList.Add(oNewMedia.MediaID, oNewMedia);
  24447.                 objStationsList.appendChild(oNewMedia.toListItem(document));
  24448.             }
  24449.             else {
  24450.                 //alert(this.MediaExistsText.replace("{{MEDIA_NAME}}",oNewMedia.MediaName));
  24451.             }
  24452.         }
  24453.     },
  24454.  
  24455.     MainDialog_Feedback: function(event) {
  24456.         EBGlobalManager_CT2384137.SendFeedback("radio");
  24457.     },
  24458.  
  24459.     MainDialog_ClearRecentStations: function(event) {
  24460.         var oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24461.         var locale = oWindow.EBToolbarPreferenceManager_CT2384137.GetPref(EBPreferenceConsts_CT2384137.Locale, true);
  24462.         var strTitle = oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_RADIO_CLEAR_RECENT_STATIONS_MSG_CAPTION", locale);
  24463.         var strText = oWindow.oToolbarManager_CT2384137.getLPKey("CTLP_STR_ID_RADIO_CLEAR_RECENT_STATIONS_MSG", locale);
  24464.  
  24465.         if (!EBGlobalManager_CT2384137.Confirm(window, strTitle, strText)) return;
  24466.  
  24467.         document.getElementById("btnClearRecent").disabled = true;
  24468.         oWindow.EBRadioManager_CT2384137.ClearRecentStations();
  24469.     },
  24470.  
  24471.     // +++++++++++++ Search Dialog +++++++++++++++
  24472.     OnLoadSearchDialog: function(event) {
  24473.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24474.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  24475.         if (dialogsDirection)
  24476.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "ebRadioSearchDialog");
  24477.  
  24478.         var oRecentBrowserWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24479.         EBRadioLanguagePack_CT2384137.SearchDialog(oRecentBrowserWindow, argSearchString)
  24480.  
  24481.         EBRadioServerComm_CT2384137.SearchRadioStations(argSearchString);
  24482.     },
  24483.  
  24484.     OnUnLoadSearchDialog: function(event) {
  24485.         //TODO unload action.
  24486.     },
  24487.  
  24488.     SearchResults: function(oSearchMediaList) {
  24489.         if (!oSearchMediaList || oSearchMediaList.arrMedia.Count() == 0) {
  24490.             this.arrMediaList = null;
  24491.         }
  24492.         else {
  24493.             this.arrMediaList = oSearchMediaList.arrMedia;
  24494.         }
  24495.  
  24496.         this.FillRadioStations();
  24497.     },
  24498.  
  24499.     SearchDialog_OnOkButton: function() {
  24500.         var oListStationsList = document.getElementById('listStationsList');
  24501.         var oMediaList = opener.document.getElementById('listStationsList');
  24502.         var arrSelectedItems = oListStationsList.selectedItems;
  24503.         var iIndex = 0;
  24504.         var oMedia = null;
  24505.         var MediaID = null;
  24506.  
  24507.         for (var i = arrSelectedItems.length - 1; i >= 0; i--) {
  24508.             iIndex = oListStationsList.getIndexOfItem(arrSelectedItems[i]);
  24509.             oMedia = this.arrMediaList.GetByIndex(iIndex);
  24510.             MediaID = this.arrMediaList.GetByIndex(iIndex).MediaID;
  24511.             if (!opener.EBRadioDialogManager_CT2384137.arrMediaList.Contains(MediaID)) {
  24512.                 opener.EBRadioDialogManager_CT2384137.arrMediaList.Add(MediaID, oMedia);
  24513.                 oMediaList.appendChild(oMedia.toListItem(opener.document));
  24514.             }
  24515.         }
  24516.     },
  24517.  
  24518.     SearchDialog_OnDblClick: function(event) {
  24519.         this.SearchDialog_OnOkButton();
  24520.         window.close();
  24521.     },
  24522.  
  24523.     SearchDialog_OnSelect: function(event) {
  24524.         var oListStationsList = document.getElementById('listStationsList');
  24525.         var iIndex = oListStationsList.selectedIndex;
  24526.         var oBtnOk = document.getElementById('ebRadioSearchDialog').getButton('accept');
  24527.         if (iIndex != -1) {
  24528.             oBtnOk.setAttribute('disabled', 'false');
  24529.         }
  24530.         else {
  24531.             oBtnOk.setAttribute('disabled', 'true');
  24532.         }
  24533.     },
  24534.  
  24535.     // +++++++++++++ AddEdit Dialog +++++++++++++++
  24536.     OnLoadAddEditDialog: function(event) {
  24537.         var objWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24538.         var dialogsDirection = objWindow.EBGlobalManager_CT2384137.IsReverseDialogs();
  24539.         if (dialogsDirection)
  24540.             EBUILogic_Dialog_CT2384137.setWindowDirection(dialogsDirection, "ebRadioAddEditDialog");
  24541.  
  24542.         var oRecentBrowserWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24543.  
  24544.         var lblAddEditLabel = document.getElementById('lblAddEditLabel');
  24545.         EBRadioLanguagePack_CT2384137.AddEditDialog(oRecentBrowserWindow, argDialogType)
  24546.  
  24547.         if (argDialogType == "add") {
  24548.             lblAddEditLabel.setAttribute('value', this.AddDialogLabel);
  24549.             window.title = "Add Your Own Radio Station"
  24550.  
  24551.         }
  24552.         else //edit
  24553.         {
  24554.             lblAddEditLabel.setAttribute('value', this.EditDialogLabel);
  24555.             window.title = "Edit Radio Station"
  24556.             var oStationURL = document.getElementById('txtURL');
  24557.             var oStationName = document.getElementById('txtName');
  24558.             var oStationType = document.getElementById('cmbStreamType');
  24559.  
  24560.             oStationURL.setAttribute('value', argURL.replace(/~!!~/g, "\\"));
  24561.             oStationName.setAttribute('value', argName);
  24562.             // set stream type
  24563.             var oComboType = document.getElementById('cmbStreamType');
  24564.             var oPopupMenu = oComboType.firstChild;
  24565.  
  24566.             var oMenuItem = null;
  24567.             for (var i = 0; i < oPopupMenu.childNodes.length; i++) {
  24568.                 oMenuItem = oPopupMenu.childNodes[i];
  24569.                 if (oMenuItem.getAttribute('value') == argType.toLowerCase()) {
  24570.                     oComboType.selectedItem = oMenuItem;
  24571.                     break;
  24572.                 }
  24573.             }
  24574.         }
  24575.         this.AddEditDialog_CheckInput();
  24576.     },
  24577.  
  24578.     OnUnLoadAddEditDialog: function(event) {
  24579.         // do nothing
  24580.     },
  24581.  
  24582.     AddEditDialog_OnOKButton: function() {
  24583.         var oStationURL = document.getElementById('txtURL');
  24584.         var oStationName = document.getElementById('txtName');
  24585.         var oStationType = document.getElementById('cmbStreamType');
  24586.         var oMediaList = opener.document.getElementById('listStationsList');
  24587.  
  24588.         var oSelectedMenuItem = oStationType.selectedItem;
  24589.         var strStreamType = oSelectedMenuItem.value
  24590.  
  24591.         // update Media Object        
  24592.         if (argDialogType == "edit") {
  24593.             opener.EBRadioDialogManager_CT2384137.oMedia.MediaURL = oStationURL.value.replace(/\\/g, "~!!~")
  24594.             opener.EBRadioDialogManager_CT2384137.oMedia.MediaName = oStationName.value
  24595.             if (strStreamType == "podcast") {
  24596.                 opener.EBRadioDialogManager_CT2384137.oMedia.SetPodCast();
  24597.             }
  24598.             else {
  24599.                 opener.EBRadioDialogManager_CT2384137.oMedia.SetType(strStreamType);
  24600.             }
  24601.  
  24602.             // update List
  24603.             var selectedIndex = opener.EBRadioDialogManager_CT2384137.SelectedIndex;
  24604.             var oListItem = oMediaList.getItemAtIndex(selectedIndex);
  24605.             oListItem.childNodes[0].setAttribute('label', oStationName.value);
  24606.             oListItem.childNodes[1].setAttribute('label', oStationURL.value);
  24607.         }
  24608.         else //add
  24609.         {
  24610.             var oNewMedia = new EBRadioMedia_CT2384137();
  24611.             oNewMedia.MediaName = oStationName.value;
  24612.             oNewMedia.MediaURL = oStationURL.value.replace(/\\/g, "~!!~");
  24613.             oNewMedia.MediaID = oNewMedia.MediaURL;
  24614.             if (strStreamType == "podcast") {
  24615.                 oNewMedia.SetPodCast();
  24616.             }
  24617.             else {
  24618.                 oNewMedia.SetType(strStreamType);
  24619.             }
  24620.             if (!opener.EBRadioDialogManager_CT2384137.arrMediaList.Contains(oNewMedia.MediaID)) {
  24621.                 opener.EBRadioDialogManager_CT2384137.arrMediaList.Add(oNewMedia.MediaID, oNewMedia);
  24622.                 oMediaList.appendChild(oNewMedia.toListItem(opener.document));
  24623.             }
  24624.             else {
  24625.                 //alert(this.MediaExistsText.replace("{{MEDIA_NAME}}",oNewMedia.MediaName));
  24626.             }
  24627.         }
  24628.     },
  24629.  
  24630.     AddEditDialog_CheckInput: function(event) {
  24631.  
  24632.         var oStationURL = document.getElementById('txtURL').value;
  24633.         var oStationName = document.getElementById('txtName').value;
  24634.         var oStationType = document.getElementById('cmbStreamType').selectedItem.value;
  24635.         var oOkButton = document.getElementById('btnAccept');
  24636.  
  24637.         if (!oStationURL || !oStationName || !oStationType)
  24638.             oOkButton.setAttribute('disabled', true);
  24639.         else
  24640.             oOkButton.setAttribute('disabled', false);
  24641.     },
  24642.  
  24643.     // +++++++++++++ Volume Dialog +++++++++++++++++++
  24644.     xulSlider: null,
  24645.     timeoutFunc: null,
  24646.     oWindow: null,
  24647.  
  24648.     Volume_OpenDialog: function(VolumeChromePath, VolumeDialogName, dWidth, dHeight, screenX, screenY) {
  24649.         window.openDialog(VolumeChromePath,
  24650.                             VolumeDialogName,
  24651.                             'chrome,dependent,titlebar=yes,resizable=no,width=' + dWidth + ',height=' + dHeight + ',screenX=' + screenX + ',screenY=' + screenY,
  24652.                             dWidth, dHeight);
  24653.     },
  24654.  
  24655.     Volume_OnLoad: function(event) {
  24656.         //resize window onload to get exact size.
  24657.         window.resizeTo(window.arguments[0], window.arguments[1]);
  24658.         
  24659.         var GetGripper = function(xulElement) {
  24660.             var arrElements = document.getAnonymousNodes(xulElement);
  24661.             var xulGripper = null;
  24662.  
  24663.             if (arrElements) {
  24664.                 for (var i = 0; i < arrElements.length; i++) {
  24665.                     if (arrElements[i].tagName == 'xul:gripper') {
  24666.                         xulGripper = arrElements[i];
  24667.                         break;
  24668.                     }
  24669.                 }
  24670.             }
  24671.  
  24672.             return xulGripper
  24673.         };
  24674.  
  24675.  
  24676.         this.oWindow = EBGlobalManager_CT2384137.GetMostRecentBrowserWindow();
  24677.  
  24678.         //usage
  24679.         this.oWindow.EBUsageRadio_CT2384137.OnClickVolume();
  24680.  
  24681.         var oElement = this.oWindow.EBRadioSkinManager_CT2384137.Slider.sliderButton;
  24682.         var thumbWidth = oElement.width;
  24683.         thumbWidth += 'px';
  24684.         var dHeight = this.oWindow.EBRadioSkinManager_CT2384137.Slider.height;
  24685.         var dWidth = this.oWindow.EBRadioSkinManager_CT2384137.Slider.width;
  24686.  
  24687.         var bgImage = this.oWindow.EBRadioSkinManager_CT2384137.Slider.normalUrl;
  24688.         bgImage = 'url(' + bgImage + ')';
  24689.         var thImage = this.oWindow.EBRadioSkinManager_CT2384137.Slider.sliderButton.normalUrl;
  24690.         thImage = 'url(' + thImage + ')';
  24691.         var oSlider = document.getElementById('slider');
  24692.         var oThumb = document.getElementById('thumb');
  24693.         var oDialog = document.getElementById('ebRadioVolumeDialog');
  24694.         var oHbox = document.getElementById('hbox');
  24695.         var oGripper = GetGripper(oThumb);
  24696.         var iVolume = this.oWindow.EBRadioConsts_CT2384137.NowState.Volume;
  24697.         this.xulSlider = oSlider;
  24698.  
  24699.         oSlider.style.backgroundImage = bgImage;
  24700.         oSlider.setAttribute('curpos', iVolume);
  24701.         oSlider.style.opacity = '0';
  24702.         this.OnLoadEffect(0);
  24703.  
  24704.  
  24705.         var oThumb_mouseover = 'this.style.backgroundImage="url(' + oElement.hoverUrl + ')"';
  24706.         var oThumb_mouseout = 'this.style.backgroundImage="url(' + oElement.normalUrl + ')"';
  24707.         var oThumb_mousedown = 'this.style.backgroundImage="url(' + oElement.pressedUrl + ')"';
  24708.         var oThumb_mouseup = 'this.style.backgroundImage="url(' + oElement.normalUrl + ')"';
  24709.  
  24710.         oThumb.style.backgroundImage = thImage;
  24711.  
  24712.         oThumb.setAttribute('ondraggesture', oThumb_mousedown);
  24713.         oThumb.setAttribute('onmouseover', oThumb_mouseover);
  24714.         oThumb.setAttribute('onmouseout', oThumb_mouseout);
  24715.         oThumb.setAttribute('onmousedown', oThumb_mousedown);
  24716.         oThumb.setAttribute('onmouseup', oThumb_mouseup);
  24717.  
  24718.         oThumb.style.width = thumbWidth;
  24719.         oHbox.height = dHeight;
  24720.         this.CheckVolume();
  24721.     },
  24722.  
  24723.     OnLoadEffect: function(opacity) {
  24724.         var fOpacity = parseFloat(opacity);
  24725.         if (fOpacity < 1) {
  24726.             fOpacity += 0.2;
  24727.             this.xulSlider.style.opacity = fOpacity;
  24728.             setTimeout(function() { EBRadioDialogManager_CT2384137.OnLoadEffect(fOpacity); }, 40);
  24729.         }
  24730.     },
  24731.  
  24732.     OnUnLoadEffect: function(opacity) {
  24733.         var fOpacity = parseFloat(opacity);
  24734.         if (fOpacity > 0) {
  24735.             fOpacity -= 0.2;
  24736.             this.xulSlider.style.opacity = fOpacity;
  24737.             setTimeout(function() { EBRadioDialogManager_CT2384137.OnUnLoadEffect(fOpacity); }, 40);
  24738.         }
  24739.         else {
  24740.             window.close();
  24741.         }
  24742.     },
  24743.  
  24744.     Volume_OnBlur: function(event) {
  24745.         this.OnUnLoadEffect(1);
  24746.     },
  24747.  
  24748.     Volume_OnUnLoad: function(event) {
  24749.         clearTimeout(this.timeoutFunc);
  24750.         this.xulSlider.style.opacity = 0;
  24751.     },
  24752.  
  24753.     CheckVolume: function() {
  24754.         var volume = this.xulSlider.getAttribute('curpos');
  24755.         if (volume != this.oWindow.EBRadioConsts_CT2384137.NowState.Volume) {
  24756.             this.oWindow.EBRadioIOManager_CT2384137.SetVolumeToRegistry(volume);
  24757.             this.oWindow.EBRadioManager_CT2384137.BroadcastVolume(volume);
  24758.         }
  24759.         this.timeoutFunc = setTimeout(function() { EBRadioDialogManager_CT2384137.CheckVolume(); }, 100);
  24760.     }
  24761.  
  24762. }
  24763.  
  24764. var EBRadioGUIManager_CT2384137 =
  24765. {
  24766.     xulPlay: null,
  24767.     xulStop: null,
  24768.     xulEq: null,
  24769.     xulMenuButton: null,
  24770.     xulMenuButtonContainer: null,
  24771.     xulSliderBG: null,
  24772.     xulSlider: null,
  24773.     xulVolume: null,
  24774.     xulShrinkUnshrink: null,
  24775.     TooltipID: 'EBRadioTooltipID_CT2384137',
  24776.     TooltipRealID: 'EBRadioTooltipRealID_CT2384137',
  24777.     RadioTooltipAnimationID: 'EBRadioTooltipAnimationID_CT2384137',
  24778.  
  24779.     Tooltips:
  24780.     {
  24781.         playing: 'Playing',
  24782.         stopped: 'Stopped',
  24783.         paused: 'Paused',
  24784.         buffering: 'Buffering',
  24785.         waiting: 'Connecting...',
  24786.         mediaEnded: 'Media ended',
  24787.         preparingNewItem: 'Preparing new item',
  24788.         ready: 'Ready',
  24789.         reconncting: 'Reconnecting',
  24790.         shrink: 'Shrink',
  24791.         expand: 'Expand',
  24792.         play: 'Play',
  24793.         stop: 'Stop',
  24794.         pause: 'Pause',
  24795.         volume: 'Volume',
  24796.         undefined: 'Undefined',
  24797.         playingReal: '[Playing in external Real player]'
  24798.     },
  24799.  
  24800.     Images:
  24801.     {
  24802.         imgPlay: "chrome://iobitcom/skin/radio/RadioPlay.gif",
  24803.         imgPlay_dn: "chrome://iobitcom/skin/radio/RadioPlay_dn.gif",
  24804.         imgPlay_on: "chrome://iobitcom/skin/radio/RadioPlay_on.gif",
  24805.         imgStop: "chrome://iobitcom/skin/radio/RadioStop.gif",
  24806.         imgStop_dn: "chrome://iobitcom/skin/radio/RadioStop_dn.gif",
  24807.         imgStop_on: "chrome://iobitcom/skin/radio/RadioStop_on.gif",
  24808.         imgPause: "chrome://iobitcom/skin/radio/RadioPause.gif",
  24809.         imgPause_dn: "chrome://iobitcom/skin/radio/RadioPause_dn.gif",
  24810.         imgPause_on: "chrome://iobitcom/skin/radio/RadioPause_on.gif",
  24811.         imgRadioEqPause: "chrome://iobitcom/skin/radio/RadioEqualizerSilent.gif",
  24812.         bgCenter: "chrome://iobitcom/skin/radio/RadioStrip.gif",
  24813.         imgSliderLine: "chrome://iobitcom/skin/radio/RadioSliderBG.gif",
  24814.         imgSliderBall: "chrome://iobitcom/skin/radio/RadioSliderBall.gif",
  24815.         imgRadioEqSilent: "chrome://iobitcom/skin/radio/RadioEqualizerSilent.gif",
  24816.         imgRadioEqLoading: "chrome://iobitcom/skin/radio/RadioEqualizerLoading.gif",
  24817.         imgRadioEqPlay: "chrome://iobitcom/skin/radio/RadioEqualizerPlay.gif",
  24818.         imgRadioEqError: "chrome://iobitcom/skin/radio/RadioError.gif",
  24819.         bgCombo: "chrome://iobitcom/skin/radio/RadioCombo.gif",
  24820.         imgShrink: "chrome://iobitcom/skin/radio/RadioMini.gif",
  24821.         imgShrink_dn: "chrome://iobitcom/skin/radio/RadioMini_dn.gif",
  24822.         imgShrink_on: "chrome://iobitcom/skin/radio/RadioMini_on.gif",
  24823.         imgExpand: "chrome://iobitcom/skin/radio/RadioMaxi.gif",
  24824.         imgExpand_dn: "chrome://iobitcom/skin/radio/RadioMaxi_dn.gif",
  24825.         imgExpand_on: "chrome://iobitcom/skin/radio/RadioMaxi_on.gif",
  24826.         imgPlayChev: "chrome://iobitcom/skin/radio/RadioPlayChev.ico",
  24827.         imgStopChev: "chrome://iobitcom/skin/radio/RadioStopChev.ico",
  24828.         imgRadioChev: "chrome://iobitcom/skin/radio/RadioImgChev.ico",
  24829.         imgRealLogo: "chrome://iobitcom/skin/radio/RealLogo.png",
  24830.         imgRealLogo_hover: "chrome://iobitcom/skin/radio/RealLogo.png",
  24831.         imgWMPLogo: "chrome://iobitcom/skin/radio/WMPLogo.png",
  24832.         imgWMPLogo_hover: "chrome://iobitcom/skin/radio/WMPLogo.png",
  24833.         imgPodcast: "chrome://iobitcom/skin/radio/Podcast.png",
  24834.         imgPodcast_hover: "chrome://iobitcom/skin/radio/Podcast.png",
  24835.         imgPlayingReal: "chrome://iobitcom/skin/radio/RadioEqualizerReal.ico",
  24836.         imgRadioTooltip: "chrome://iobitcom/skin/radio/RadioTooltipStopped.gif",
  24837.         imgRadioTooltipPl: "chrome://iobitcom/skin/radio/RadioTooltipPlaying.gif",
  24838.         imgRadioTooltipSt: "chrome://iobitcom/skin/radio/RadioTooltipStopped.gif",
  24839.         imgVolume: "chrome://iobitcom/skin/radio/RadioVolume.gif",
  24840.         imgVolume_dn: "chrome://iobitcom/skin/radio/RadioVolume_dn.gif",
  24841.         imgVolume_on: "chrome://iobitcom/skin/radio/RadioVolume_on.gif",
  24842.         imgSliderBG: ""
  24843.     },
  24844.  
  24845.     Init: function() {
  24846.         this.xulPlay = document.getElementById(EBRadioConsts_CT2384137.RadioPlayID);
  24847.         this.xulStop = document.getElementById(EBRadioConsts_CT2384137.RadioStopID);
  24848.         this.xulMenuButton = document.getElementById(EBRadioConsts_CT2384137.RadioMenuButtonID);
  24849.         this.xulMenuButtonContainer = document.getElementById(EBRadioConsts_CT2384137.RadioMenuButtonContainerID);
  24850.         this.xulSliderBG = document.getElementById(EBRadioConsts_CT2384137.RadioSliderContainerID);
  24851.         this.xulSlider = document.getElementById(EBRadioConsts_CT2384137.RadioSliderID);
  24852.         this.xulShrink = document.getElementById(EBRadioConsts_CT2384137.RadioShrinkID);
  24853.         this.xulEq = document.getElementById(EBRadioConsts_CT2384137.RadioEqID);
  24854.  
  24855.         //if radio expanded
  24856.         if (this.xulMenuButton)
  24857.             this.xulMenuButton.setAttribute('tooltip', this.TooltipID);
  24858.  
  24859.         this.CreateTooltip();
  24860.         this.CreateRealTooltip();
  24861.     },
  24862.  
  24863.     SetNewState: function(strState, strError) {
  24864.         //states:    0-undefined, 1-stopped, 2-paused, 3-playing, 6-buffering, 7-waiting
  24865.         //            8-media ended, 9-preparing new media item, 10-ready, 11-reconnecting
  24866.         switch (strState) {
  24867.             case "undefined": this.SetUndefined(); break;
  24868.             case "stopped": this.SetStopped(); break;
  24869.             case "paused": this.SetPause(); break;
  24870.             case "playing": this.SetPlay(); break;
  24871.             case "buffering": this.SetBuffering(); break;
  24872.             case "waiting": this.SetWaiting(); break;
  24873.             case "media ended": this.SetMediaEnded(); break;
  24874.             case "preparing new item": this.SetPreparingNewItem; break;
  24875.             case "ready": this.SetReady(); break;
  24876.             case "reconnecting": this.Reconnecting(); break;
  24877.             case "error": this.SetError(strError); break;
  24878.             case "real": this.SetPlayingReal(); break;
  24879.         }
  24880.     },
  24881.  
  24882.     SetPlayingReal: function() {
  24883.         if (this.xulEq) {
  24884.             this.xulEq.setAttribute('tooltip', this.TooltipRealID);
  24885.             this.xulVolume.setAttribute('tooltip', this.TooltipRealID);
  24886.             this.xulEq.removeAttribute('tooltiptext');
  24887.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.stoppedUrl);
  24888.             this.xulEq.setAttribute('onclick', '');
  24889.             this.xulEq.setAttribute('style', '');
  24890.         }
  24891.  
  24892.         if (this.xulVolume)
  24893.             this.xulVolume.removeAttribute('tooltiptext');
  24894.  
  24895.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRealLogo);
  24896.         this.Images.imgRadioTooltip = EBRadioSkinManager_CT2384137.Indicator.stoppedUrl;
  24897.         this.OnPause();
  24898.     },
  24899.  
  24900.     SetError: function(strError) {
  24901.         var strAdditional, troubleShootPage;
  24902.         if (this.xulEq) {
  24903.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.errorUrl);
  24904.             this.xulEq.setAttribute('tooltiptext', strError);
  24905.         }
  24906.  
  24907.         if (strError && strError.match('Cannot find Windows Media Player, click here for troubleshoot')) {
  24908.             strAdditional = EBRadioConsts_CT2384137.ErrorPage;
  24909.             troubleShootPage = EBActionManager_CT2384137.GetWebServerURL(strAdditional) + '#aFirefoxPlugin';
  24910.             if (this.xulEq) {
  24911.                 this.xulEq.onclick = function(e) { EBWeb_CT2384137.LoadURLInNewWindow(troubleShootPage); };
  24912.                 this.xulEq.setAttribute('style', 'cursor:pointer');
  24913.             }
  24914.         }
  24915.         else if (strError && strError.match('Cannot find Real Player')) {
  24916.             strAdditional = EBRadioConsts_CT2384137.GetRealURL;
  24917.             troubleShootPage = EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  24918.             if (this.xulEq) {
  24919.                 this.xulEq.onclick = function(e) { EBWeb_CT2384137.LoadURLInNewWindow(troubleShootPage); };
  24920.                 this.xulEq.setAttribute('style', 'cursor:pointer');
  24921.             }
  24922.         }
  24923.         if (this.xulVolume) {
  24924.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  24925.             this.xulVolume.removeAttribute('tooltip');
  24926.         }
  24927.  
  24928.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRadioEqError);
  24929.         this.Images.imgRadioTooltip = this.Images.imgRadioEqError;
  24930.         this.OnPause();
  24931.     },
  24932.  
  24933.     SetUndefined: function() {
  24934.         if (this.xulEq) {
  24935.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.errorUrl);
  24936.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.undefined);
  24937.             var strAdditional = EBRadioConsts_CT2384137.ErrorPage;
  24938.             var troubleShootPage = EBActionManager_CT2384137.GetWebServerURL(strAdditional);
  24939.             this.xulEq.setAttribute('onclick', 'EBWeb_CT2384137.LoadURLInNewWindow("' + troubleShootPage + '")');
  24940.             this.xulEq.setAttribute('style', 'cursor:pointer');
  24941.         }
  24942.  
  24943.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRadioEqError);
  24944.  
  24945.         if (this.xulVolume) {
  24946.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  24947.             this.xulVolume.removeAttribute('tooltip');
  24948.         }
  24949.  
  24950.         this.Images.imgRadioTooltip = this.Images.imgRadioEqError;
  24951.         this.OnPause();
  24952.     },
  24953.  
  24954.     SetPlayChevron: function() {
  24955.         var btnPlay = document.getElementById(EBRadioConsts_CT2384137.RadioPlayButtonChevronID);
  24956.         var image = EBRadioSkinManager_CT2384137.ObjSkinDef.ChevronStopImageUrl;
  24957.         btnPlay.setAttribute('label', this.Tooltips.stop);
  24958.         btnPlay.setAttribute('image', image);
  24959.         btnPlay.setAttribute('oncommand', 'EBRadioManager_CT2384137.OnPause();event.cancelBubble = true;');
  24960.     },
  24961.  
  24962.     SetPauseChevron: function() {
  24963.         var btnPlay = document.getElementById(EBRadioConsts_CT2384137.RadioPlayButtonChevronID);
  24964.         var image = EBRadioSkinManager_CT2384137.ObjSkinDef.ChevronPlayImageUrl;
  24965.         btnPlay.setAttribute('label', this.Tooltips.play);
  24966.         btnPlay.setAttribute('image', image);
  24967.         btnPlay.setAttribute('oncommand', 'EBRadioManager_CT2384137.OnPlay();event.cancelBubble = true;');
  24968.     },
  24969.  
  24970.     SetPause: function() {
  24971.         if (this.xulEq) {
  24972.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.stoppedUrl);
  24973.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.paused);
  24974.             this.xulEq.setAttribute('onclick', '');
  24975.             this.xulEq.setAttribute('style', '');
  24976.         }
  24977.  
  24978.         if (this.xulVolume) {
  24979.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  24980.             this.xulVolume.removeAttribute('tooltip');
  24981.         }
  24982.  
  24983.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  24984.  
  24985.         if (EBRadioConsts_CT2384137.NowState.InChevron)
  24986.             this.SetPauseChevron();
  24987.  
  24988.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgWMPLogo);
  24989.     },
  24990.  
  24991.     SetPlay: function() {
  24992.         if (this.xulEq) {
  24993.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.playingUrl);
  24994.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.playing);
  24995.             this.xulEq.setAttribute('onclick', '');
  24996.             this.xulEq.setAttribute('style', '');
  24997.         }
  24998.  
  24999.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRadioEqPlay);
  25000.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipPl;
  25001.  
  25002.         if (this.xulVolume) {
  25003.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  25004.             this.xulVolume.removeAttribute('tooltip');
  25005.         }
  25006.  
  25007.         this.OnPlay();
  25008.  
  25009.         if (EBRadioConsts_CT2384137.NowState.InChevron)
  25010.             this.SetPlayChevron();
  25011.     },
  25012.  
  25013.     SetBuffering: function() {
  25014.         if (this.xulEq) {
  25015.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.bufferingUrl);
  25016.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.buffering);
  25017.             this.xulEq.setAttribute('onclick', '');
  25018.             this.xulEq.setAttribute('style', '');
  25019.         }
  25020.  
  25021.         if (this.xulVolume) {
  25022.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  25023.             this.xulVolume.removeAttribute('tooltip');
  25024.         }
  25025.  
  25026.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRadioEqLoading);
  25027.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  25028.         this.OnPlay();
  25029.     },
  25030.  
  25031.     SetWaiting: function() {
  25032.         if (this.xulEq) {
  25033.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.bufferingUrl);
  25034.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.waiting);
  25035.             this.xulEq.setAttribute('onclick', '');
  25036.             this.xulEq.setAttribute('style', '');
  25037.         }
  25038.  
  25039.         if (this.xulVolume) {
  25040.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  25041.             this.xulVolume.removeAttribute('tooltip');
  25042.         }
  25043.  
  25044.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRadioEqLoading);
  25045.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  25046.         this.OnPlay();
  25047.     },
  25048.  
  25049.     SetMediaEnded: function() {
  25050.         if (this.xulEq) {
  25051.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.stoppedUrl);
  25052.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.mediaEnded);
  25053.             this.xulEq.setAttribute('onclick', '');
  25054.             this.xulEq.setAttribute('style', '');
  25055.         }
  25056.  
  25057.         if (this.xulVolume) {
  25058.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  25059.             this.xulVolume.removeAttribute('tooltip');
  25060.         }
  25061.  
  25062.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgWMPLogo);
  25063.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  25064.         this.OnPause();
  25065.     },
  25066.  
  25067.     SetPreparingNewItem: function() {
  25068.         if (this.xulEq) {
  25069.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.bufferingUrl);
  25070.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.preparingNewItem);
  25071.             this.xulEq.setAttribute('onclick', '');
  25072.             this.xulEq.setAttribute('style', '');
  25073.         }
  25074.  
  25075.         if (this.xulVolume) {
  25076.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  25077.             this.xulVolume.removeAttribute('tooltip');
  25078.         }
  25079.  
  25080.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRadioEqLoading);
  25081.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  25082.         this.OnPlay();
  25083.     },
  25084.  
  25085.     SetStopped: function() {
  25086.         if (this.xulEq) {
  25087.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.stoppedUrl);
  25088.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.stopped);
  25089.             this.xulEq.setAttribute('onclick', '');
  25090.             this.xulEq.setAttribute('style', '');
  25091.         }
  25092.  
  25093.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  25094.         this.OnPause();
  25095.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgWMPLogo);
  25096.  
  25097.         if (EBRadioConsts_CT2384137.NowState.InChevron)
  25098.             this.SetStopChevron();
  25099.     },
  25100.  
  25101.     SetReady: function() {
  25102.         if (this.xulEq) {
  25103.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.stoppedUrl);
  25104.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.ready);
  25105.             this.xulEq.setAttribute('onclick', '');
  25106.             this.xulEq.setAttribute('style', '');
  25107.         }
  25108.  
  25109.         if (this.xulVolume) {
  25110.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  25111.             this.xulVolume.removeAttribute('tooltip');
  25112.         }
  25113.  
  25114.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgWMPLogo);
  25115.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  25116.         this.OnPause();
  25117.     },
  25118.  
  25119.     Reconnecting: function() {
  25120.         if (this.xulEq) {
  25121.             this.xulEq.setAttribute('src', EBRadioSkinManager_CT2384137.Indicator.bufferingUrl);
  25122.             this.xulEq.setAttribute('tooltiptext', this.Tooltips.reconnecting);
  25123.             this.xulEq.setAttribute('onclick', '');
  25124.         }
  25125.  
  25126.         if (this.xulVolume) {
  25127.             this.xulVolume.setAttribute('tooltiptext', EBRadioGUIManager_CT2384137.Tooltips.volume);
  25128.             this.xulVolume.removeAttribute('tooltip');
  25129.         }
  25130.  
  25131.         EBRadioConsts_CT2384137.RadioMenu.SetActiveMenuItemImage(this.Images.imgRadioEqLoading);
  25132.         this.Images.imgRadioTooltip = this.Images.imgRadioTooltipSt;
  25133.         this.OnPlay();
  25134.  
  25135.     },
  25136.  
  25137.     OnPlay: function() {
  25138.         EBRadioSkinManager_CT2384137.ChangePlayToPauseButton(null, null);
  25139.     },
  25140.  
  25141.     OnPause: function() {
  25142.         EBRadioSkinManager_CT2384137.ChangePauseToPlayButton(null, null);
  25143.     },
  25144.  
  25145.     SetShrink: function() {
  25146.         if (this.xulShrink) {
  25147.             EBRadioConsts_CT2384137.NowState.IsShrinked = true;
  25148.             EBRadioSkinManager_CT2384137.SetShrink();
  25149.         }
  25150.     },
  25151.  
  25152.     SetExpand: function() {
  25153.         if (this.xulShrink) {
  25154.             EBRadioConsts_CT2384137.NowState.IsShrinked = false;
  25155.             EBRadioSkinManager_CT2384137.SetExpand();
  25156.         }
  25157.     },
  25158.  
  25159.     SetStation: function(strName, strMediaType, strMediaURL) {
  25160.         //if radio expanded
  25161.         if (this.xulMenuButton) {
  25162.             this.xulMenuButton.setAttribute('label', strName);
  25163.             this.xulMenuButton.setAttribute('MediaType', strMediaType);
  25164.             this.xulMenuButton.setAttribute('MediaURL', strMediaURL);
  25165.         }
  25166.     },
  25167.  
  25168.     GetRadioChevronImage: function() {
  25169.         var strImage = '';
  25170.  
  25171.         if (EBRadioSkinManager_CT2384137.ObjSkinDef)
  25172.             strImage = EBRadioSkinManager_CT2384137.ObjSkinDef.ChevronMenuImageUrl;
  25173.         else
  25174.             strImage = this.Images.imgRadioChev;
  25175.  
  25176.         return strImage;
  25177.     },
  25178.  
  25179.     CreateTooltip: function() {
  25180.         if (!this.xulMenuButton)
  25181.             return;
  25182.  
  25183.         var strMainPopupSetID = EBComponentsConsts_CT2384137.MainPopupSetID;
  25184.         var objMainPopupSet = document.getElementById(strMainPopupSetID);
  25185.  
  25186.         var strTooltipID = this.TooltipID;
  25187.         var strOrient = 'horisontal';
  25188.  
  25189.         //patch to 1.0.* - send the toolbarbutton id to retrieve the label and tooltip instead of
  25190.         //the toolbarbutton object itself as a param to the onpopupshowing event
  25191.         //set addEventListener also fails to work in 1.0.*
  25192.         var strToolbarButtonID = this.xulMenuButton.getAttribute('id');
  25193.         var strOnPopupShowing = "";
  25194.         var objXULTooltip = EBXULFactory_CT2384137.CreateTooltip(strTooltipID, strOrient, strOnPopupShowing);
  25195.         objXULTooltip.addEventListener("popupshowing",
  25196.         function(event) {
  25197.             event.stopPropagation();
  25198.             return EBRadioGUIManager_CT2384137.OnTooltipPopupShowing(false, event, strToolbarButtonID);
  25199.         }, false);
  25200.         objXULTooltip.setAttribute('noautohide', 'true');
  25201.         objMainPopupSet.appendChild(objXULTooltip);
  25202.     },
  25203.  
  25204.     CreateRealTooltip: function() {
  25205.         if (!this.xulMenuButton) return;
  25206.  
  25207.         var strMainPopupSetID = EBComponentsConsts_CT2384137.MainPopupSetID;
  25208.         var objMainPopupSet = document.getElementById(strMainPopupSetID);
  25209.         var strTooltipID = this.TooltipRealID;
  25210.         var strOrient = 'horisontal';
  25211.         //patch to 1.0.* - send the toolbarbutton id to retrieve the label and tooltip instead of
  25212.         //the toolbarbutton object itself as a param to the onpopupshowing event
  25213.         //set addEventListener also fails to work in 1.0.*
  25214.         var strToolbarButtonID = this.xulMenuButton.getAttribute('id');
  25215.         var strOnPopupShowing = "";
  25216.         var objXULTooltip = EBXULFactory_CT2384137.CreateTooltip(strTooltipID, strOrient, strOnPopupShowing);
  25217.         objXULTooltip.addEventListener("popupshowing",
  25218.         function(event) {
  25219.             event.stopPropagation();
  25220.             return EBRadioGUIManager_CT2384137.OnTooltipPopupShowing(true, event, strToolbarButtonID);
  25221.         }, false);
  25222.         objXULTooltip.setAttribute('noautohide', 'true');
  25223.         objMainPopupSet.appendChild(objXULTooltip);
  25224.     },
  25225.  
  25226.     OnTooltipPopupShowing: function(isReal, event, strToolbarButtonID) {
  25227.         if (event.eventPhase != 2) return false;
  25228.  
  25229.         var XULTooltip = event.target;
  25230.         var XULToolbarButton = document.getElementById(strToolbarButtonID);
  25231.  
  25232.         //check to see if the mouse is hover the toolbarbutton
  25233.         //to prevent this tooltip shown on this toolbar buttons childs
  25234.         if (!EBGlobalManager_CT2384137.IsElementInScreenCoordinates(XULToolbarButton) && !isReal)
  25235.             return false;
  25236.  
  25237.  
  25238.         while (XULTooltip.childNodes.length > 0)
  25239.             XULTooltip.removeChild(XULTooltip.firstChild);
  25240.  
  25241.         var mediaName = XULToolbarButton.getAttribute('label');
  25242.         var mediaType = XULToolbarButton.getAttribute('MediaType');
  25243.         var mediaURL = XULToolbarButton.getAttribute('MediaURL');
  25244.         var strImage = '';
  25245.  
  25246.         switch (mediaType) {
  25247.             case EBRadioConsts_CT2384137.PlayerTypes.MediaPlayer: strImage = this.Images.imgWMPLogo; break;
  25248.             case EBRadioConsts_CT2384137.PlayerTypes.RealPlayer:
  25249.                 strImage = this.Images.imgRealLogo;
  25250.                 mediaName += ' ' + this.Tooltips.playingReal;
  25251.                 break;
  25252.             case "Podcast": strImage = this.Images.imgPodcast; break;
  25253.         }
  25254.  
  25255.         var XULTooltipCont = EBXULFactory_CT2384137.CreateHBox('', '', '');
  25256.         var XULLeftCont = EBXULFactory_CT2384137.CreateHBox('', '', '');
  25257.         var XULRightCont = EBXULFactory_CT2384137.CreateVBox('', '', '');
  25258.         var XULRightTop = EBXULFactory_CT2384137.CreateHBox('', '', '');
  25259.         var XULRightBottom = EBXULFactory_CT2384137.CreateHBox('', '', '');
  25260.         var XULLeftImage = EBXULFactory_CT2384137.CreateImage(EBRadioGUIManager_CT2384137.Images.imgRadioTooltip, '', '');
  25261.         var XULMediaImage = EBXULFactory_CT2384137.CreateImage(strImage, '', '');
  25262.         var XULMediaName = EBXULFactory_CT2384137.CreateLabel(mediaName, '');
  25263.  
  25264.         XULLeftCont.appendChild(XULLeftImage);
  25265.         XULLeftCont.setAttribute('style', 'margin: 3px 10px 3px 10px');
  25266.         XULRightTop.appendChild(XULMediaImage);
  25267.         XULRightTop.appendChild(XULMediaName);
  25268.         XULRightTop.setAttribute('style', 'margin: 7px 3px 0px 0px');
  25269.         XULRightCont.appendChild(XULRightTop);
  25270.         XULRightCont.appendChild(XULRightBottom);
  25271.  
  25272.         XULTooltipCont.appendChild(XULLeftCont);
  25273.         XULTooltipCont.appendChild(XULRightCont);
  25274.         XULTooltipCont.setAttribute('style', '');
  25275.         XULTooltip.appendChild(XULTooltipCont);
  25276.  
  25277.         return true;
  25278.     }
  25279. };
  25280. //Radio IO Manager Class
  25281. var EBRadioIOManager_CT2384137 =
  25282. {
  25283.     SetStationToRegistry: function(name, url, mediaType, menuID, isPodcast, mediaID) {
  25284.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.StationName, encodeURIComponent(name));
  25285.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.StationURL, url);
  25286.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.MediaType, mediaType);
  25287.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.MenuSelectedID, menuID);
  25288.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.IsPodcast, isPodcast);
  25289.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.MediaID, mediaID);
  25290.     },
  25291.  
  25292.     GetUseRealActiveX: function() {
  25293.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.UseRealActiveX);
  25294.     },
  25295.  
  25296.     SetShrinkedToRegistry: function(state) {
  25297.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.Shrinked, state);
  25298.     },
  25299.  
  25300.     GetShrinkedFromRegistry: function() {
  25301.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.Shrinked);
  25302.     },
  25303.  
  25304.     SetVolumeToRegistry: function(volume) {
  25305.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.Volume, volume);
  25306.     },
  25307.  
  25308.     GetVolumeFromRegistry: function() {
  25309.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.Volume);
  25310.     },
  25311.  
  25312.     GetStationNameFromRegistry: function() {
  25313.         return decodeURIComponent(EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.StationName));
  25314.     },
  25315.  
  25316.     GetStationURLFromRegistry: function() {
  25317.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.StationURL);
  25318.     },
  25319.  
  25320.     GetMediaTypeFromRegistry: function() {
  25321.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.MediaType);
  25322.     },
  25323.  
  25324.     GetMenuSelectedIdFromRegistry: function() {
  25325.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.MenuSelectedID);
  25326.     },
  25327.  
  25328.     GetStationIdFromRegistry: function() {
  25329.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.MediaID);
  25330.     },
  25331.  
  25332.     GetIsPodcastFromRegistry: function() {
  25333.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.IsPodcast);
  25334.     },
  25335.  
  25336.     Init: function(oRadio) {
  25337.         if (oRadio.ComponentItem.PredefinedListInterval) {
  25338.             EBRadioConsts_CT2384137.CheckInterval = oRadio.ComponentItem.PredefinedListInterval * 60 * 1000;
  25339.         }
  25340.         if (oRadio.ComponentItem.PodcastInterval) {
  25341.             EBRadioConsts_CT2384137.PodcastCheckInterval = oRadio.ComponentItem.PodcastInterval;
  25342.         }
  25343.         if (oRadio.ComponentItem.RadioServerURL) {
  25344.             EBRadioConsts_CT2384137.ServerURL = oRadio.ComponentItem.RadioServerURL;
  25345.         }
  25346.  
  25347.         EBRadioServerComm_CT2384137.RequestPublisherMedia();
  25348.     },
  25349.  
  25350.     SaveMediaXMLToFile: function(XMLStationsNode, strRadioFullPath) {
  25351.         //var strRadioFolder = EBRadioConsts_CT2384137.FolderName;
  25352.         //var strRadioFullPath = strRadioFolder + EBDirIO_CT2384137.sep + MediaFile;
  25353.         var oFileMedia = EBIOManager_CT2384137.CreateToolbarFile(strRadioFullPath);
  25354.         var strXML = EBXML_CT2384137.GetStringXml(XMLStationsNode);
  25355.         EBFileIO_CT2384137.write(oFileMedia, strXML, "", EBGlobalConsts_CT2384137.DefaultCharset);
  25356.     },
  25357.  
  25358.     LoadMediaFromFile: function(which) {
  25359.         var FileName = '';
  25360.         var strRadioFolder = EBRadioConsts_CT2384137.FolderName;
  25361.  
  25362.         if (which == EBRadioConsts_CT2384137.MediaFileType.Publisher) {
  25363.             FileName = EBRadioConsts_CT2384137.PublisherMediaFile;
  25364.             if (!EBMCManager_CT2384137.IsSelectedOriginalCommunity())
  25365.                 strRadioFolder = EBMCManager_CT2384137.GetCommunitySettingsPath() + strRadioFolder;
  25366.         }
  25367.         else if (which == EBRadioConsts_CT2384137.MediaFileType.User) {
  25368.             this.GetUserMediaFromCookies();
  25369.             FileName = EBRadioConsts_CT2384137.UserMediaFile;
  25370.         }
  25371.         else if (which == EBRadioConsts_CT2384137.MediaFileType.Recent)
  25372.             FileName = EBRadioConsts_CT2384137.RecentMediaFile;
  25373.         else if (which == EBRadioConsts_CT2384137.MediaFileType.IP)
  25374.             FileName = EBRadioConsts_CT2384137.IPMediaFile;
  25375.         else
  25376.             return null;
  25377.  
  25378.         var strRadioFullPath = strRadioFolder + EBDirIO_CT2384137.sep + FileName;
  25379.  
  25380.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(strRadioFullPath);
  25381.         var strXMLMedia = EBFileIO_CT2384137.read(oFile, EBGlobalConsts_CT2384137.DefaultCharset);
  25382.         var XMLMedia = null;
  25383.  
  25384.         if (strXMLMedia)
  25385.             XMLMedia = EBXML_CT2384137.GetXmlDocument(strXMLMedia);
  25386.  
  25387.         //check if file is valid
  25388.         var isPublisherRadio = EBComponentsManager_CT2384137.GetRadioComponent().ComponentItem.objData.isPublisher;
  25389.         if (strXMLMedia.length == 0) {
  25390.             if (which == EBRadioConsts_CT2384137.MediaFileType.Publisher && isPublisherRadio) {
  25391.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.LastCheckTime, "0", true)
  25392.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.LastUpdateServerTime, "0", true);
  25393.             }
  25394.             else if (which == EBRadioConsts_CT2384137.MediaFileType.Recent)
  25395.                 return new EBRadioRecentMediaList_CT2384137();
  25396.             else if (which == EBRadioConsts_CT2384137.MediaFileType.IP
  25397.                     && (!isPublisherRadio || (isPublisherRadio && EBRadioConsts_CT2384137.EnableIPStations))) {
  25398.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.LastCheckTime, "0", true)
  25399.                 EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.LastUpdateServerIPTime, "0", true);
  25400.             }
  25401.             else
  25402.                 return new EBRadioMediaList_CT2384137();
  25403.         }
  25404.  
  25405.         if (!XMLMedia) return null;
  25406.  
  25407.         var MediaList = null;
  25408.         if (which == EBRadioConsts_CT2384137.MediaFileType.Recent)
  25409.             MediaList = new EBRadioRecentMediaList_CT2384137(XMLMedia.documentElement);
  25410.         else
  25411.             MediaList = new EBRadioMediaList_CT2384137(XMLMedia.documentElement);
  25412.  
  25413.         return MediaList;
  25414.  
  25415.     },
  25416.  
  25417.     DeleteRecentStations: function() {
  25418.         var strFileName = EBRadioConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + EBRadioConsts_CT2384137.RecentMediaFile;
  25419.         if (!EBIOManager_CT2384137.IsToolbarFileExists(strFileName)) return;
  25420.  
  25421.         var oFile = EBIOManager_CT2384137.CreateToolbarFile(strFileName);
  25422.         if (oFile)
  25423.             EBFileIO_CT2384137.unlink(oFile);
  25424.     },
  25425.  
  25426.     GetUserMediaFromCookies: function() {
  25427.         var Imported = EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.CookiesImportComplete);
  25428.         if (Imported)
  25429.             return;
  25430.  
  25431.         var uri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
  25432.         var oCookieManager = Components.classes["@mozilla.org/cookieService;1"].getService(Components.interfaces.nsICookieService);
  25433.         uri.spec = EBRadioConsts_CT2384137.StationsCookie.DomainConduit;
  25434.         var strCookies = oCookieManager.getCookieString(uri, null);
  25435.         if (!strCookies || !strCookies.match(EBRadioConsts_CT2384137.StationsCookie.Name)) {
  25436.             uri.spec = EBRadioConsts_CT2384137.StationsCookie.DomainSite2;
  25437.             strCookies = oCookieManager.getCookieString(uri, null);
  25438.             if (!strCookies || !strCookies.match(EBRadioConsts_CT2384137.StationsCookie.Name)) {
  25439.                 uri.spec = EBRadioConsts_CT2384137.StationsCookie.DomainEffectiveBrand;
  25440.                 strCookies = oCookieManager.getCookieString(uri, null);
  25441.                 if (!strCookies) {
  25442.                     return;
  25443.                 }
  25444.             }
  25445.         }
  25446.         var arrCookies = strCookies.split(";");
  25447.         var i = 0;
  25448.         while (!arrCookies[i].match(EBRadioConsts_CT2384137.StationsCookie.Name) && i < arrCookies.length - 1) {
  25449.             i++;
  25450.         }
  25451.         if (!arrCookies[i].match(EBRadioConsts_CT2384137.StationsCookie.Name)) {
  25452.             EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.CookiesImportComplete, true);
  25453.             return;
  25454.         }
  25455.         var strMediaList = arrCookies[i].replace(EBRadioConsts_CT2384137.StationsCookie.Name + "=", "")
  25456.         strMediaList = decodeURIComponent(strMediaList);
  25457.         var arrMediaList = strMediaList.split("!!");
  25458.         var strXMLMedia = EBXML_CT2384137.CreateXmlNodeStartString(EBRadioConsts_CT2384137.xmlTags.RADIO_STATIONS);
  25459.         var arrMedia = null;
  25460.         for (i = 0; i < arrMediaList.length; i++) {
  25461.             arrMedia = arrMediaList[i].split("|");
  25462.             strXMLMedia += EBXML_CT2384137.CreateXmlNodeStartString(EBRadioConsts_CT2384137.xmlTags.RADIO_STATION);
  25463.             strXMLMedia += EBXML_CT2384137.CreateXmlNodeString(EBRadioConsts_CT2384137.xmlTags.STATION_ID, arrMedia[1]);
  25464.             strXMLMedia += EBXML_CT2384137.CreateXmlNodeString(EBRadioConsts_CT2384137.xmlTags.STATION_NAME, decodeURIComponent(arrMedia[2]));
  25465.             strXMLMedia += EBXML_CT2384137.CreateXmlNodeString(EBRadioConsts_CT2384137.xmlTags.STATION_URL, arrMedia[3]);
  25466.             strXMLMedia += EBXML_CT2384137.CreateXmlNodeString(EBRadioConsts_CT2384137.xmlTags.TYPE, arrMedia[4]);
  25467.             strXMLMedia += EBXML_CT2384137.CreateXmlNodeString(EBRadioConsts_CT2384137.xmlTags.CONTENT_TYPE, arrMedia[5]);
  25468.             strXMLMedia += EBXML_CT2384137.CreateXmlNodeEndString(EBRadioConsts_CT2384137.xmlTags.RADIO_STATION);
  25469.         }
  25470.         strXMLMedia += EBXML_CT2384137.CreateXmlNodeEndString(EBRadioConsts_CT2384137.xmlTags.RADIO_STATIONS);
  25471.         strXMLMedia = EBXML_CT2384137.LegalizeEBXML(strXMLMedia);
  25472.         var XMLMedia = EBXML_CT2384137.GetXmlDocument(strXMLMedia);
  25473.  
  25474.         var UserMediaFileName = EBRadioConsts_CT2384137.FolderName + EBDirIO_CT2384137.sep + EBRadioConsts_CT2384137.UserMediaFile;
  25475.         this.SaveMediaXMLToFile(XMLMedia, UserMediaFileName);
  25476.  
  25477.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.CookiesImportComplete, true);
  25478.     },
  25479.  
  25480.     SetPlayState: function(state) {
  25481.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.PlayState, state);
  25482.     },
  25483.  
  25484.     GetPlayState: function() {
  25485.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.PlayState);
  25486.     },
  25487.  
  25488.     SetShowState: function(state) {
  25489.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.ShowState, state);
  25490.     },
  25491.  
  25492.     GetShowState: function() {
  25493.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.ShowState);
  25494.     },
  25495.  
  25496.     SetPlayingStation: function(ID, name) {
  25497.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.StationID, ID);
  25498.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.StationName, name);
  25499.     },
  25500.  
  25501.     GetPlayingStationName: function() {
  25502.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.StationName);
  25503.     },
  25504.  
  25505.     GetPlayingStationID: function() {
  25506.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.StationID);
  25507.     },
  25508.  
  25509.     SetErrorString: function(strError) {
  25510.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.ErrorString, strError);
  25511.     },
  25512.  
  25513.     GetErrorString: function() {
  25514.         return EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.ErrorString);
  25515.     },
  25516.  
  25517.     FillStationsInfo: function(xmlDoc, tagName) {
  25518.         var XMLPublisherNode = null;
  25519.         var xmlStations = null;
  25520.         var strXmlText = '';
  25521.         var strLUT = '0';
  25522.         var obj = new Object();
  25523.  
  25524.  
  25525.         XMLPublisherNode = EBXML_CT2384137.SelectSingleNode(xmlDoc, tagName);
  25526.         if (XMLPublisherNode) {
  25527.             strXmlText = EBXML_CT2384137.GetXmlNodeValue(XMLPublisherNode);
  25528.             if (strXmlText != EBRadioConsts_CT2384137.XMLResponseErrorReply) {
  25529.                 obj.error = false;
  25530.                 for (var i = 0; i < XMLPublisherNode.childNodes.length; i++) {
  25531.                     if (XMLPublisherNode.childNodes[i].tagName == EBRadioConsts_CT2384137.XMLRadioStations) {
  25532.                         xmlStations = XMLPublisherNode.childNodes[i];
  25533.                     }
  25534.                     else if (XMLPublisherNode.childNodes[i].tagName == EBRadioConsts_CT2384137.XMLLUT) {
  25535.                         strLUT = EBXML_CT2384137.GetXmlNodeValue(XMLPublisherNode.childNodes[i]);
  25536.                     }
  25537.                 }
  25538.  
  25539.                 if (xmlStations && xmlStations.childNodes.length == 0)
  25540.                     xmlStations = null;
  25541.             }
  25542.             else
  25543.                 obj.error = true;
  25544.  
  25545.             if (xmlStations) {
  25546.                 strXmlText = EBXML_CT2384137.GetXmlNodeValue(xmlStations);
  25547.  
  25548.                 if (strXmlText == EBRadioConsts_CT2384137.XMLResponseNoChange)
  25549.                     xmlStations = null;
  25550.             }
  25551.         }
  25552.  
  25553.         obj.xmlStations = xmlStations;
  25554.         obj.lut = strLUT;
  25555.  
  25556.         return obj;
  25557.     },
  25558.  
  25559.     NullifyTimes: function() {
  25560.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.LastCheckTime, "0", true);
  25561.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.LastUpdateServerTime, "0", true);
  25562.         EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.LastUpdateServerIPTime, "0", true);
  25563.     },
  25564.  
  25565.     InvalidateCache: function(bValue) {
  25566.         var bOldValud = EBToolbarPreferenceManager_CT2384137.GetPref(EBRadioConsts_CT2384137.Registry.InvalidateCache, true);
  25567.         if (typeof bValue != "undefined")
  25568.             EBToolbarPreferenceManager_CT2384137.SetPref(EBRadioConsts_CT2384137.Registry.InvalidateCache, bValue, true);
  25569.  
  25570.         return bOldValud;
  25571.     }
  25572. }
  25573. //Radio Manager
  25574. var EBRadioManager_CT2384137 =
  25575. {
  25576.     isAfterRefresh: false,
  25577.     observer: null,
  25578.     isLastEventError: false,
  25579.  
  25580.     UnloadToolbar: function(isShown) {
  25581.         EBRadioCore_CT2384137.UnloadToolbar(isShown);
  25582.  
  25583.         if (isShown) {
  25584.             var oRadio = EBComponentsManager_CT2384137.GetRadioComponent();
  25585.             EBRadioSkinManager_CT2384137.UnloadSkin(oRadio, 1);
  25586.         }
  25587.  
  25588.         if (this.observer) {
  25589.             this.observer.unregister();
  25590.             this.observer = null;
  25591.         }
  25592.     },
  25593.  
  25594.     RadioBuildComplete: function() {
  25595.         this.Init(true);
  25596.     },
  25597.  
  25598.     ApplySkin: function() {
  25599.         var oRadio = EBComponentsManager_CT2384137.GetRadioComponent();
  25600.         EBRadioSkinManager_CT2384137.LoadSkin(oRadio, 1);
  25601.     },
  25602.  
  25603.     CheckIfSkinLoaded: function() {
  25604.         if (!EBRadioSkinManager_CT2384137.ObjSkinDef)
  25605.             EBRadioSkinManager_CT2384137.LoadDefaultSkin();
  25606.     },
  25607.  
  25608.     BroadcastVolume: function(volume) {
  25609.         var objWindowsManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
  25610.                         .getService(Components.interfaces.nsIWindowMediator);
  25611.  
  25612.         var objEnumerator = objWindowsManager.getEnumerator('navigator:browser');
  25613.         while (objEnumerator.hasMoreElements()) {
  25614.             var objWindow = objEnumerator.getNext();
  25615.             if (objWindow.EBRadioManager_CT2384137) {
  25616.                 try {
  25617.                     objWindow.EBRadioConsts_CT2384137.NowState.Volume = volume;
  25618.                     objWindow.EBRadioConsts_CT2384137.xulSlider.setAttribute('curpos', volume);
  25619.                 }
  25620.                 catch (ex) { }
  25621.             }
  25622.         }
  25623.         EBRadioCore_CT2384137.BroadcastVolume(volume);
  25624.     },
  25625.  
  25626.     SetInChevron: function(xulChevronMenu) {
  25627.         var XULMenu = EBRadioConsts_CT2384137.RadioMenu.GetXULMenu();
  25628.         while (xulChevronMenu.childNodes.length > 0) {
  25629.             xulChevronMenu.removeChild(xulChevronMenu.firstChild);
  25630.         }
  25631.         xulChevronMenu.appendChild(XULMenu);
  25632.         EBRadioConsts_CT2384137.NowState.InChevron = true;
  25633.     },
  25634.  
  25635.     SetOutChevron: function() {
  25636.         if (!EBRadioConsts_CT2384137.RadioMenu) return;
  25637.  
  25638.         var XULMenu = EBRadioConsts_CT2384137.RadioMenu.GetXULMenu();
  25639.         var RadioMenuButtonID = EBRadioConsts_CT2384137.RadioMenuButtonID;
  25640.         var menuButton = document.getElementById(RadioMenuButtonID)
  25641.         if (menuButton) {
  25642.             while (menuButton.childNodes.length > 0) {
  25643.                 menuButton.removeChild(menuButton.firstChild);
  25644.             }
  25645.             menuButton.appendChild(XULMenu);
  25646.         }
  25647.         EBRadioConsts_CT2384137.NowState.InChevron = false;
  25648.     },
  25649.  
  25650.     StateManager: function(strState, strError) {
  25651.  
  25652.         if (EBRadioConsts_CT2384137.NowState.PlayState != strState) {
  25653.             if (!EBRadioConsts_CT2384137.NowState.IsUserPause) {
  25654.                 if (strState == "stopped" && EBRadioConsts_CT2384137.NowState.IsPodcast) {
  25655.                     this.PlayNextPodcastItem();
  25656.                 }
  25657.             }
  25658.             this.BroadcastNewState(strState, strError);
  25659.  
  25660.             //client log - radio error
  25661.             if (strState == "error") {
  25662.                 if (!this.isAfterRefresh) {
  25663.                     var objToolbarInfo = new oToolbar_CT2384137.clientLog.toolbarInfo(
  25664.                     EBGlobalConsts_CT2384137.ToolbarVersion,
  25665.                     EBGlobalConsts_CT2384137.ToolbarCTID,
  25666.                     EBActionManager_CT2384137.GetCTID(),
  25667.                     EBGlobalManager_CT2384137.GetOS(),
  25668.                     EBGlobalManager_CT2384137.GetBrowserNameAndVersion());
  25669.                     var msg = "";
  25670.                     var data = EBXML_CT2384137.CreateXmlNodeStartString("ERR_DESCRIPTION");
  25671.                     data += EBXML_CT2384137.CreateXmlNodeString("PLAYER_MSG", strError);
  25672.                     data += EBXML_CT2384137.CreateXmlNodeString("STATION_URL", EBRadioConsts_CT2384137.NowState.StationURL);
  25673.                     data += EBXML_CT2384137.CreateXmlNodeEndString("ERR_DESCRIPTION");
  25674.  
  25675.                     var objEvent = new oToolbar_CT2384137.clientLog.event(20, "ERROR", msg, data);
  25676.                     oToolbar_CT2384137.clientLog.manager.send(objToolbarInfo, objEvent);
  25677.                 }
  25678.                 this.broadcastIsAfterRefresh(false);
  25679.             }
  25680.         }
  25681.     },
  25682.  
  25683.     PlayNextPodcastItem: function() {
  25684.         EBRadioConsts_CT2384137.RadioMenu.PlayNextPodcastItem(EBRadioConsts_CT2384137.NowState.MenuSelectedID);
  25685.     },
  25686.  
  25687.     CheckIfStationLoaded: function() {
  25688.         var menuButton = document.getElementById(EBRadioConsts_CT2384137.RadioMenuButtonID)
  25689.  
  25690.         //if shrink mode, return
  25691.         if (!menuButton)
  25692.             return;
  25693.  
  25694.         var btnLabel = menuButton.getAttribute('label');
  25695.  
  25696.         if (btnLabel == EBRadioConsts_CT2384137.LoadingText)
  25697.             menuButton.setAttribute('label', EBRadioDialogManager_CT2384137.NoStationsText);
  25698.  
  25699.         if (btnLabel == EBRadioDialogManager_CT2384137.NoStationsText)
  25700.             this.FindStationToSelect();
  25701.     },
  25702.  
  25703.     FindStationToSelect: function(lastPodcastId) {
  25704.         var userMediaList = EBRadioConsts_CT2384137.UserMediaList;
  25705.         var otherMediaList = (EBComponentsManager_CT2384137.GetRadioComponent().ComponentItem.objData.isPublisher) ? EBRadioConsts_CT2384137.PublisherMediaList : EBRadioConsts_CT2384137.IPMediaList;
  25706.         if ((!otherMediaList || otherMediaList.arrMedia.Count() == 0) &&
  25707.             (!userMediaList || userMediaList.arrMedia.Count() == 0)) {
  25708.             EBRadioConsts_CT2384137.NowState.StationName = EBRadioDialogManager_CT2384137.NoStationsText;
  25709.             EBRadioConsts_CT2384137.NowState.StationURL = '';
  25710.             EBRadioConsts_CT2384137.NowState.MenuSelectedID = '';
  25711.             EBRadioConsts_CT2384137.NowState.IsPodcast = false;
  25712.             EBRadioConsts_CT2384137.NowState.MediaID = '';
  25713.             EBRadioGUIManager_CT2384137.SetStation(EBRadioConsts_CT2384137.NowState.StationName, EBRadioConsts_CT2384137.NowState.MediaType, EBRadioConsts_CT2384137.NowState.StationURL);
  25714.         }
  25715.         else {
  25716.             //try to find station, not podcast
  25717.             var found = false;
  25718.             var i = 0;
  25719.             var mediaList = null;
  25720.             var noPublisherMedia = false;
  25721.             var switched = false;
  25722.             if (otherMediaList.arrMedia.Count() != 0)
  25723.                 mediaList = otherMediaList.arrMedia;
  25724.             else {
  25725.                 mediaList = userMediaList.arrMedia;
  25726.                 switched = true;
  25727.                 noPublisherMedia = true;
  25728.             }
  25729.             var media = null;
  25730.             do {
  25731.                 media = mediaList.GetByIndex(i);
  25732.                 if (!media.isPodCast) {
  25733.                     found = true;
  25734.                 }
  25735.                 else {
  25736.                     if (mediaList.Count() == i + 1 && !switched) {
  25737.                         mediaList = userMediaList.arrMedia;
  25738.                         i = 0;
  25739.                         switched = true;
  25740.                     }
  25741.                     else {
  25742.                         i++;
  25743.                     }
  25744.                 }
  25745.             }
  25746.             while (media.isPodCast && i < mediaList.Count())
  25747.  
  25748.             if (found) {
  25749.                 EBRadioConsts_CT2384137.NowState.StationURL = media.MediaURL;
  25750.                 EBRadioConsts_CT2384137.NowState.StationName = media.MediaName;
  25751.                 EBRadioConsts_CT2384137.NowState.MediaType = media.GetTypeString();
  25752.                 EBRadioConsts_CT2384137.NowState.MenuSelectedID = EBRadioConsts_CT2384137.MenuIDPreffix + media.MediaID;
  25753.                 EBRadioConsts_CT2384137.NowState.IsPodcast = false;
  25754.                 EBRadioConsts_CT2384137.NowState.MediaID = media.MediaID;
  25755.             }
  25756.             else {
  25757.                 if (noPublisherMedia) {
  25758.                     media = userMediaList.arrMedia.GetByIndex(0);
  25759.                 }
  25760.                 else {
  25761.                     media = otherMediaList.arrMedia.GetByIndex(0);
  25762.                 }
  25763.                 var podcastMenuId = EBRadioConsts_CT2384137.MenuIDPreffix + media.MediaID;
  25764.                 var oPodcastMenu = document.getElementById(podcastMenuId);
  25765.                 var oFirstPodcastItem = oPodcastMenu.firstChild;
  25766.                 var strMediaURL = oFirstPodcastItem.getAttribute('MediaURL');
  25767.                 if (strMediaURL) {
  25768.                     EBRadioConsts_CT2384137.NowState.StationURL = strMediaURL;
  25769.                     EBRadioConsts_CT2384137.NowState.MediaType = EBRadioConsts_CT2384137.PlayerTypes.MediaPlayer
  25770.                     EBRadioConsts_CT2384137.NowState.StationName = oFirstPodcastItem.getAttribute('MediaName');
  25771.                     EBRadioConsts_CT2384137.NowState.MenuSelectedID = oFirstPodcastItem.getAttribute('id');
  25772.                     EBRadioConsts_CT2384137.NowState.IsPodcast = true;
  25773.                     EBRadioConsts_CT2384137.NowState.MediaID = media.MediaID;
  25774.                     found = true;
  25775.  
  25776.                 }
  25777.                 else {
  25778.                     EBRadioConsts_CT2384137.NowState.StationName = EBRadioDialogManager_CT2384137.NoStationsText;
  25779.                     EBRadioConsts_CT2384137.NowState.StationURL = '';
  25780.                     EBRadioConsts_CT2384137.NowState.MenuSelectedID = '';
  25781.                     EBRadioConsts_CT2384137.NowState.IsPodcast = false;
  25782.                     EBRadioConsts_CT2384137.NowState.MediaID = '';
  25783.                     EBRadioGUIManager_CT2384137.SetStation(EBRadioConsts_CT2384137.NowState.StationName, EBRadioConsts_CT2384137.NowState.MediaType, EBRadioConsts_CT2384137.NowState.StationURL);
  25784.                     EBRadioConsts_CT2384137.SetStationName = oFirstPodcastItem.getAttribute('id');
  25785.                     setTimeout(function() { EBRadioManager_CT2384137.CheckIfStationLoaded(); }, 500);
  25786.                 }
  25787.             }
  25788.         }
  25789.         if (found) {
  25790.             EBRadioIOManager_CT2384137.SetStationToRegistry(EBRadioConsts_CT2384137.NowState.StationName,
  25791.                                                                     EBRadioConsts_CT2384137.NowState.StationURL,
  25792.                                                                     EBRadioConsts_CT2384137.NowState.MediaType,
  25793.                                                                     EBRadioConsts_CT2384137.NowState.MenuSelectedID,
  25794.                                                                     EBRadioConsts_CT2384137.NowState.IsPodcast,
  25795.                                                                     EBRadioConsts_CT2384137.NowState.MediaID);
  25796.             EBRadioGUIManager_CT2384137.SetStation(EBRadioConsts_CT2384137.NowState.StationName,
  25797.                                                             EBRadioConsts_CT2384137.NowState.MediaType,
  25798.                                                             EBRadioConsts_CT2384137.NowState.StationURL);
  25799.             EBRadioConsts_CT2384137.RadioMenu.OnMenuStationSelect(EBRadioConsts_CT2384137.NowState.MenuSelectedID);
  25800.         }
  25801.     },
  25802.  
  25803.     UpdateMenuButtonAfterShrink: function(xulMenuButton) {
  25804.         if (EBRadioConsts_CT2384137.RadioMenu) {
  25805.             var menuPopup = EBRadioConsts_CT2384137.RadioMenu.XULMenu;
  25806.             xulMenuButton.appendChild(menuPopup);
  25807.             EBRadioGUIManager_CT2384137.SetStation(EBRadioConsts_CT2384137.NowState.StationName,
  25808.                                                  EBRadioConsts_CT2384137.NowState.MediaType,
  25809.                                                  EBRadioConsts_CT2384137.NowState.StationURL);
  25810.         }
  25811.     },
  25812.  
  25813.     UpdateGUIOnLoad: function(forceFind) {
  25814.         EBRadioConsts_CT2384137.NowState.StationURL = EBRadioIOManager_CT2384137.GetStationURLFromRegistry();
  25815.         EBRadioConsts_CT2384137.NowState.MediaType = EBRadioIOManager_CT2384137.GetMediaTypeFromRegistry();
  25816.         EBRadioConsts_CT2384137.NowState.MenuSelectedID = EBRadioIOManager_CT2384137.GetMenuSelectedIdFromRegistry();
  25817.         EBRadioConsts_CT2384137.NowState.IsPodcast = EBRadioIOManager_CT2384137.GetIsPodcastFromRegistry();
  25818.         EBRadioConsts_CT2384137.NowState.StationName = EBRadioIOManager_CT2384137.GetStationNameFromRegistry();
  25819.         EBRadioConsts_CT2384137.NowState.MediaID = EBRadioIOManager_CT2384137.GetStationIdFromRegistry();
  25820.         var stationNotExists = false;
  25821.  
  25822.         if (EBRadioConsts_CT2384137.NowState.MenuSelectedID) {
  25823.             var selectedMenu = document.getElementById(EBRadioConsts_CT2384137.NowState.MenuSelectedID)
  25824.             if (!selectedMenu) {
  25825.                 if (!EBRadioConsts_CT2384137.NowState.IsPodcast)
  25826.                     stationNotExists = true;
  25827.                 else
  25828.                     setTimeout(function() { EBRadioManager_CT2384137.CheckIfStationLoaded(); }, 350);
  25829.             }
  25830.         }
  25831.  
  25832.         // no selected station or must f